为什么vector迭代器没有显示operator= ?

Why is it showing no operator= for my vector iterator?

本文关键字:operator 显示 vector 迭代器 为什么      更新时间:2023-10-16

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

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

您需要使用vector<int>::const_iterator而不是vector<int>::iterator

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

auto i = A.begin();

不能使用常规迭代器遍历const vector。

vector<int>::iterator i必须是::const_iterator i

c++ STL中const_iterator和non-const iterator的区别是什么?

由于将vector作为const传递,因此普通的迭代器无法完成此工作。相反,对于const vector,需要使用const_iterator

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

这应该可以解决你的问题!

因为形参是const vector<int>,所以迭代器必须是const_iterator


更改行

vector<int>::iterator i;

vector<int>::const_iterator i;

或者使用auto来获取

的类型