6 c++ iterator vector std stdvector
让我们说我有这样的矢量.
std::vector<a_complicated_whatever_identifier *> *something
= new std::vector<a_complicated_whatever_identifier *>;
// by the way, is this the right way to do this?
Run Code Online (Sandbox Code Playgroud)
现在我想为此获得一个迭代器...所以我会这样做.
std::vector<a_complicated_whatever_identifier *>::iterator iter;
Run Code Online (Sandbox Code Playgroud)
但我觉得我的代码有点太多了.我想知道,无论类型如何,是否有更简短的方式来请求迭代器?
我在考虑类似的东西.
something::iterator iter;
// OK, don’t laugh at me, I am still beginning with C++
Run Code Online (Sandbox Code Playgroud)
好吧,它显然失败了,但我想你明白了.如何实现这个或类似的东西?
Ker*_* SB 11
你通常会给你的容器合理的typedef,然后它是轻而易举的:
typedef std::pair<int, Employee> EmployeeTag;
typedef std::map<Foo, EmployeeTag> SignInRecords;
for (SignInRecords::const_iterator it = clock_ins.begin(); ... )
^^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
通常情况下,具有用于容器一个方便的typedef是更实际和自我记录,对于迭代明确的typedef(想象一下,如果你改变容器).
使用新的C++(11),你可以说auto it = clock_ins.cbegin()得到一个const-iterator.
使用typedef.
typedef std::vector<complicated *>::iterator complicated_iter
Run Code Online (Sandbox Code Playgroud)
然后像这样设置它们:
complicated_iter begin, end;
Run Code Online (Sandbox Code Playgroud)
在C++ 11中,您将能够使用auto.
auto iter = my_container.begin();
Run Code Online (Sandbox Code Playgroud)
在此期间,只需对vector使用typedef:
typedef std::vector<a_complicated_whatever_identifier *> my_vector;
my_vector::iterator iter = my_container.begin();
Run Code Online (Sandbox Code Playgroud)