2011-02-06 4 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 :: векторах. – 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 
    } 
} 

Если вы используете современный компилятор, вы можете использовать функцию auto C++ 0x автоматически вывести тип:

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 :: на экземпляре.

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(); 
} 
Смежные вопросы