2011-02-06 203 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(); 
} 
相關問題