2011-02-06 4 views
0

J'ai un vecteur comme ceci:itérer std :: vecteur <std :: vecteur <char>>?

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

Je voudrais itérer ces vecteur et le vecteur contenu dans, mais je ne sais pas comment j'accéder le vecteur à l'intérieur en utilisant l'itérateur du premier ?

J'ai déjà ce qui suit:

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

vous devriez probablement stocker des données de char dans std :: strings et non t dans std :: vectors. – flownt

Répondre

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 
    } 
} 

Si vous utilisez un compilateur moderne, vous pouvez utiliser la fonction auto pour en déduire automatiquement le type C++ 0x:

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

Vous ne pouvez pas spécifier un type comme celui-ci (*first_iter)::iterator. Il suffit d'utiliser std::vector<char>::iterator.

(*first_iter)->begin() doit être (*first_iter).begin() (ou first_iter->begin()). *first_iter est un std::vector<char>, pas un pointeur.

1

Vous devez épeler vous-même le type de l'itérateur interne, vous ne pouvez pas accéder à un type de classe via l'opérateur scope :: sur une instance.

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

Ce serait la façon de le faire il:

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(); 
} 
Questions connexes