2011-02-06 188 views
0

我有一个这样的载体:iterate std :: vector <std :: vector <char>>?

std::vector<std::vector<char> > _lines; 

我想重复这些载体和其中包含的载体,但是我不知道我会如何使用第一个迭代器访问内部矢量?

我已经有下列要求:

std::vector<std::vector<char> >::iterator first_iter = _lines.begin(); 

     for (; first_iter != _lines.end(); first_iter++) 
     { 
      (*first_iter)::iterator second_iter = (*first_iter)->begin(); // something is wrong with this? How do I get the second vector to iterate? 
     } 
+0

你应该存储char数据在std :: strings和no t在std :: vectors中。 – flownt 2011-02-06 21:16:05

回答

6
for (std::vector<std::vector<char> >::iterator i = _lines.begin(); 
               i != _lines.end(); ++i) 
{ 
    for (std::vector<char>::iterator j = i->begin(); j != i->end(); ++j) 
    { 
     // ... use *j 
    } 
} 

如果使用的是现代的编译器,你可以使用的C++ 0x功能auto自动推断类型:

for (auto i = _lines.begin(); i != _lines.end(); ++i) 
{ 
    for (auto j = i->begin(); j != i->end(); ++j) 
    { 
     // ... use *j 
    } 
} 
1

不能指定类型这样(*first_iter)::iterator。只需使用std::vector<char>::iterator

(*first_iter)->begin()应该是(*first_iter).begin()(或first_iter->begin())。 *first_iter是一个std::vector<char>,而不是一个指针。

1

你需要自己拼写内部迭代器的类型,你不能通过一个实例的scope operator ::来访问一个类的类型。

std::vector<char>::iterator second_iter = ... 
1
std::vector<std::vector<char> >::iterator first_iter =_lines.begin(); 
for (; first_iter != _lines.end(); first_iter++) { 

    std::vector<char>::iterator second_iter = (*first_iter).begin(); // or first_iter->begin() 
    ... 
} 
0

这是做的方式它:

std::vector<std::vector<char> >::iterator first_iter = _lines.begin(); 

for (; first_iter != _lines.end(); first_iter++) 
{ 
    std::vector<char>::iterator second_iter = first_iter->begin(); 
} 
相关问题