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

 

posted @ 2019-11-01 17:08  星光夜  阅读(3342)  评论(0)    收藏  举报