【问题标题】:Why is it showing no operator= for my vector iterator?为什么我的向量迭代器没有显示 operator=?
【发布时间】:2017-02-28 06:18:45
【问题描述】:

这是计算子数组最大和的函数

int Solution::maxSubArray(const vector<int> &A) {
vector<int>::iterator i;


int max_so_far = *A.begin();
int current_max = *A.begin();


for(i = A.begin(); i != A.end(); ++i)
{   
    current_max = max(*i,*i+current_max);
    max_so_far = max(max_so_far,current_max)
}
return max_so_far;

}

这是错误,我在 C++11 中得到这个,而不是在以前的版本中。帮我解决这个问题

solution.cpp: In member function 'int Solution::maxSubArray(const      std::vector<int>&)':
solution.cpp:9:8: error: no match for 'operator=' (operand types are     'std::vector<int>::iterator {aka __gnu_cxx::__normal_iterator<int*,     std::vector<int> >}' and 'std::vector<int>::const_iterator {aka    __gnu_cxx::__normal_iterator<const int*, std::vector<int> >}')
  for(i = A.begin(); i != A.end(); ++i) 
    ^
solution.cpp:9:8: note: candidates are:
In file included from /usr/include/c++/4.8/bits/stl_algobase.h:67:0,
             from /usr/include/c++/4.8/bits/char_traits.h:39,
             from /usr/include/c++/4.8/ios:40,
             from /usr/include/c++/4.8/ostream:38,
             from /usr/include/c++/4.8/iostream:39,
             from solution.h:7,
             from solution.cpp:-3:
/usr/include/c++/4.8/bits/stl_iterator.h:708:11: note:    __gnu_cxx::__normal_iterator<int*, std::vector<int> >&    __gnu_cxx::__normal_iterator<int*, std::vector<int> >::operator=(const   __gnu_cxx::__normal_iterator<int*, std::vector<int> >&)
     class __normal_iterator
            ^
  /usr/include/c++/4.8/bits/stl_iterator.h:708:11: note:   no known      conversion for argument 1 from 'std::vector<int>::const_iterator {aka   __gnu_cxx::__normal_iterator<const int*, std::vector<int> >}' to 'const   __gnu_cxx::__normal_iterator<int*, std::vector<int> >&'
 /usr/include/c++/4.8/bits/stl_iterator.h:708:11: note:   __gnu_cxx::__normal_iterator<int*, std::vector<int> >& __gnu_cxx::__normal_iterator<int*, std::vector<int> >::operator=    (__gnu_cxx::__normal_iterator<int*, std::vector<int> >&&)
  /usr/include/c++/4.8/bits/stl_iterator.h:708:11: note:   no known      conversion for argument 1 f

【问题讨论】:

  • 旁白:current_max = max(*i,*i+current_max); 非常可疑,你不是说current_sum 吗?您正在对 A 求和,而 max_so_far 只有在某些值为负数时才会有所不同

标签: c++ c++11 stl


【解决方案1】:

您不能使用常规迭代器来遍历 const 向量。

vector&lt;int&gt;::iterator i 必须是 ::const_iterator i

看到这个问题What is the difference between const_iterator and non-const iterator in the C++ STL?

【讨论】:

    【解决方案2】:

    您需要使用vector&lt;int&gt;::const_iterator 而不是vector&lt;int&gt;::iterator

    如果您使用的是支持 C++11 或更高版本的编译器,则可以使用 auto 类型。

    auto i = A.begin();
    

    【讨论】:

      【解决方案3】:

      迭代器需要是const_iterator,因为参数是const vector&lt;int&gt;


      换行

      vector<int>::iterator i;
      

      vector<int>::const_iterator i;
      

      或者使用auto获取类型

      【讨论】:

        【解决方案4】:

        由于您将向量作为 const 传递,因此普通的 iterator 将无法完成这项工作。 相反,您需要一个 const_iterator 来作为 const 向量

        int Solution::maxSubArray(const vector<int> &A) {
        vector<int>::const_iterator i;
        for(i = A.begin(); i != A.end(); ++i)
        {   
         ....
        }
        

        这应该会为您解决问题!

        【讨论】:

          猜你喜欢
          • 2016-03-15
          • 2018-08-13
          • 2020-04-21
          • 2020-09-09
          • 1970-01-01
          • 2021-03-10
          • 2013-03-29
          • 2013-12-27
          • 2021-01-03
          相关资源
          最近更新 更多