C++查找vector中等于目标值元素的iterator 代码错误排查
代码存在的问题如下:
- 参数值传递导致迭代器悬空
函数find_it的第一个参数是值传递的std::vector<T> vec,调用时会把传入的vector拷贝一份生成函数内的临时对象。函数返回的是这个临时对象的迭代器,函数执行结束后临时对象被销毁,返回的迭代器变成野迭代器,后续访问属于未定义行为。
修复方法:把参数改为左值引用,修改为std::vector<T>& vec。 - 模板依赖类型缺少typename声明
函数内定义迭代器的行std::vector<T>::iterator it = vec.begin();中,std::vector<T>::iterator是依赖模板参数T的类型,编译阶段无法直接识别为类型,会触发编译错误。
修复方法:前面添加typename关键字,修改为typename std::vector<T>::iterator it = vec.begin();。 - 多余的解引用操作
main函数中std::cout << *(*res) << std::endl;写法错误,res本身就是std::vector<int>::iterator类型,一次解引用*res就可以拿到存储的int值,二次解引用相当于对int值做指针操作,会直接编译报错。
修复方法:修改为std::cout << *res << std::endl;。
额外通用性优化建议:当前函数的target固定为int类型,只能适配元素可和int比较的vector,要是想支持任意类型的vector查找,可以把target的类型改为const T& target。
内容的提问来源于stack exchange,提问作者Ausrada404
相关产品推荐
相关产品推荐

