Как вы получаете размер конкретной векторной строки в cpp?

0

Я не знаю почему, но почему-то это не сработает. Есть ли другой способ легко получить размер строки, этот, похоже, не очень эффективен.

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(); ^

  • 2
    Вы имеете в виду row->size() .
  • 2
    Если вы делаете что-то в первый раз, например, с использованием итераторов, вам следует начать с очень простого примера, чтобы понять основы. Только тогда перейдите к более сложным вещам.
Показать ещё 2 комментария
Теги:
vector

2 ответа

1
Лучший ответ

Вы вы ошибаетесь, итераторы.. кстати, измените:

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();
  • 0
    ах хорошо спасибо лол
0

Подумайте об итераторе как о каком-то обобщенном указателе. Общее правило заключается в том, что, если ваш итератора it является vector<X>::iterator, то *it является X&.

Как вы писали в своей программе, тип row является vector<vector<string>>::iterator. Это означает, что *row является vector<string>&, и вы можете вызвать его функцию size(): либо (*row).size() либо просто row->size().

Ещё вопросы

Сообщество Overcoder
Наверх
Меню