一情景:

  算法功能:对于传入的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 {, };
}

二、问题

但是编译的时候发现如下问题:

C++学习五  const vector&lt;int&gt;类型的迭代器使用-LMLPHP

也就是无法将<const int*>,转换为<pointer>

观察上面的算法可以发现:

C++学习五  const vector&lt;int&gt;类型的迭代器使用-LMLPHP

类型不匹配。

如果我们直接定义修改成:

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

05-17 17:14
查看更多