Я не знаю почему, но почему-то это не сработает. Есть ли другой способ легко получить размер строки, этот, похоже, не очень эффективен.
vector< vector<string> >::iterator row;
vector<string>::iterator col;
for (row = vector.begin(); row != vector.end(); row++)
{
std::ostringstream value;
value << vector[*row].size(); //error
cout << "The length is" << value << endl;
value.str("");
value.clear();
}
error: нет соответствия для 'operator []' (типы операндов: 'std :: vector>>' и 'std :: vector>') val << vec [* row].size(); ^
Вы вы ошибаетесь, итераторы.. кстати, измените:
value << vector[*row].size();
с:
value << *row.size();
/* or value << row->size(); */
Что касается вашего вопроса, посмотрите на этот пример:
typedef vector<vector<string>> Matrix;
/* specific index */
const int index = 3;
Matrix matrix;
Matrix::iterator row = matrix.begin() + index;
cout << row->size();
Подумайте об итераторе как о каком-то обобщенном указателе. Общее правило заключается в том, что, если ваш итератора it
является vector<X>::iterator
, то *it
является X&
.
Как вы писали в своей программе, тип row
является vector<vector<string>>::iterator
. Это означает, что *row
является vector<string>&
, и вы можете вызвать его функцию size()
: либо (*row).size()
либо просто row->size()
.
row->size()
.