我在下面的简单代码中遇到了问题:
void foo (vector<int>:: iterator it, vector<int> n)
{
vector<int>:: iterator it2 = it +1;
while (it2!=n.end())
{
cout<<*it2<<endl;
it2++;
}
}
main()
{
vector<int> m{1,2,3,4};
vector<int>:: iterator it = m.begin();
foo (it, m);
}
我希望终端中有 2、3 和 4,但我在输出中得到了一些愚蠢的结果。基本上可以使用迭代器作为函数的输入吗?这段代码有什么问题?我怎样才能使它正确?
最佳答案
你通过了vector<int> n
作为拷贝。因此你的 it2
指向不同的 vector (在 main
中创建的 vector )。您的支票it2!=n.end()
自 it2
起无效是另一个 vector 的迭代器。
传递 n
通过引用是一种解决方案。其他方法将传递结束迭代器而不是 vector 。
将 vector 作为常量引用传递:
void foo (vector<int>:: iterator it, const vector<int>& n)
传递结束迭代器:
void foo (vector<int>::iterator it, vector<int>::iterator end)
{
...
while ( it2 != end )
...
}
关于c++ - 迭代器作为 C++ 中的函数输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43804842/