C++学习五 const vector<int>类型的迭代器使用
一情景:
算法功能:对于传入的vector, 能够找到两个数字,使其相加之和为target,然后返回这两个数字的位置(也就是秩)
最开始是这样的一个问题:
对于一个传入的const vector<int>类型的vector,希望能够使用迭代器去访问每一个元素
代码如下:
#include<vector> using namespace std; std::pair<std::size_t, std::size_t> two_sum(const std::vector<int>& numbers, int target) { for(vector<int>::iterator it=numbers.begin();it!=numbers.end();it++) { for(vector<int>::iterator it_r=numbers.end()-1;it_r>it;it_r--) { if((*it+*it_r)==target) return{it-numbers.begin(),it_r-numbers.begin()}; } } return {0, 0}; }
二、问题
但是编译的时候发现如下问题:

也就是无法将<const int*>,转换为<pointer>
观察上面的算法可以发现:

类型不匹配。
如果我们直接定义修改成:
const vector<int>::iterator it=numbers.begin()
这里的迭代器仍然是不可以修改的,我希望的是迭代器可以修改。
具体用法可以参考链接:
https://www.cnblogs.com/geloutingyu/p/8010993.html
三、修改
修改之后的代码如下:
#include<vector> using namespace std; std::pair<std::size_t, std::size_t> two_sum(const std::vector<int>& numbers, int target) { for(vector<int>::const_iterator it=numbers.begin();it!=numbers.end();it++) { for(vector<int>::const_iterator it_r=numbers.end()-1;it_r>it;it_r--) { if((*it+*it_r)==target) return{it-numbers.begin(),it_r-numbers.begin()}; } } return {0, 0}; }
可以看到,这里的迭代器被修改为:
vector<int>::const_iterator it=numbers.begin()
运行结果,发现正确
参考链接: https://www.cnblogs.com/geloutingyu/p/8010993.html
纵一苇之所如,临万顷之茫然。

浙公网安备 33010602011771号