一情景:
算法功能:对于传入的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()-;it_r>it;it_r--)
{
if((*it+*it_r)==target)
return{it-numbers.begin(),it_r-numbers.begin()};
}
}
return {, };
}
二、问题
但是编译的时候发现如下问题:
也就是无法将<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()-;it_r>it;it_r--)
{
if((*it+*it_r)==target)
return{it-numbers.begin(),it_r-numbers.begin()};
}
}
return {, };
}
可以看到,这里的迭代器被修改为:
vector<int>::const_iterator it=numbers.begin()
运行结果,发现正确
参考链接: https://www.cnblogs.com/geloutingyu/p/8010993.html