我有一个向量 std::vector。我想迭代向量以找到匹配项,如果找到想要返回指向元素的指针,如下所示:
const int * findint(std::vector <int> &v, int a)
{
std::vector<int>::const_iterator i1,i2;
i1 = v.begin();
i2 = v.end();
for(;i1 != i2;++i1) {
if(a== *i1) {
return(i1);
}
}
return(0);
}
这是使用 GNU g++2.95.3 编译器编译和工作正常,但不能使用 GNU g++ 4.9.2 编译并给出以下错误:
error: cannot convert 'std::vector<GenFld>::const_iterator {aka __gnu_cxx::__normal_iterator<const int*, std::vector<int> >}' to 'const int*' in return
[exec] return(i1);
需要帮忙。
原文由 Dr. Debasish Jana 发布,翻译遵循 CC BY-SA 4.0 许可协议
这将解决您的问题:
Edit : Note that I changed iterators to
cbegin
andcend
also thevector
is now passed asconst
.但是,IMO 的正确做法(关于 nathanoliver 注释):
使用它时必须小心。在向量上的任何
push_back
或insert
或erase
之后,指针和迭代器可能无效,有关完整列表,请参阅 迭代器失效规则。如果您想保留线索以稍后到达某些项目。如果您可以保证只会添加到向量的后面,您可以使用以下方法保留项目的索引: