2011-02-06 17 views
0

私はこのようなベクトルがあります。しかし、私は私が最初のもののイテレータを使用して内部のベクトルにアクセスしたいかわからない、私はこれらのベクトルと内に含まれるベクトルを反復処理したい反復::ベクトル<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

おそらくstd :: stringsとnoにcharデータを格納するべきですstd :: vectors内のt。 – flownt

答えて

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_iterstd::vector<char>であり、ポインタではありません。

1

内部イテレータのタイプを自分で綴る必要があります。インスタンスのスコープ演算子::でクラスの型にアクセスすることはできません。

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(); 
} 
関連する問題