我不知道为什么,但由于某种原因它不起作用。有没有其他方法可以轻松获得一行的大小,这个似乎不是很有效。
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();
}
错误:'operator []'不匹配(操作数类型为 'std :: vector&gt; &GT;”和 'std :: vector&gt;') val&lt;&lt; VEC [*行] .size(); ^
答案 0 :(得分: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();
答案 1 :(得分:0)
将迭代器视为一种通用指针。一般规则是,如果您的迭代器it
为vector<X>::iterator
,则*it
为X&
。
正如您在程序中所写的那样,row
的类型是vector<vector<string>>::iterator
。这意味着*row
是vector<string>&
,您可以调用size()
函数:(*row).size()
或更简单地row->size()
。