编译以下函数时,以下是编译错误。为什么第二个for循环中的yt != endIx
是非法的。
错误C2678:二进制'!=' :找不到哪个运算符采用了类型' std :: _ Vector_iterator>>'的左手操作数。 (或者没有可接受的转换)
void printDebug(vector <int> ar)
{
for (auto it = ar.begin(); it != ar.end(); it++)
{
auto endIx = ar.end() - it;
for (auto yt = ar.begin(); yt != endIx ; yt++)
{
cout << *it << " : " << endIx ;
}
cout << endl;
}
}
为了避免混淆,我已将auto end iterator重命名为endIx;
答案 0 :(得分:9)
ar.end() - it
的类型是std::vector<int>::difference_type
(a container trait给出迭代器之间的距离类型),它是不是迭代器。
在循环中使用迭代器算法与ar.begin() + end
:
void printDebug(vector <int> ar)
{
for (auto it = ar.begin(); it != ar.end(); it++)
{
auto end = ar.end() - it; // end is of type vector <int>::difference_type
for (auto yt = ar.begin(); yt != ar.begin() + end; yt++)
{
cout << *it << " : " << end;
}
cout << endl;
}
}
注意:强>
您应该通过const引用传递矢量,而不是通过值传递:
void printDebug(const vector<int>& ar)
{
for (auto it = ar.begin(); it != ar.end(); it++)
{
auto end = ar.end() - it; // end is of type vector <int>::difference_type
for (auto yt = ar.begin(); yt != ar.begin() + end; yt++)
{
cout << *it << " : " << end;
}
cout << endl;
}
}