c++ - 为什么我的 vector 迭代器没有显示 operator=?

标签 c++ c++11 stl

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

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();

关于c++ - 为什么我的 vector 迭代器没有显示 operator=?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40117317/

相关文章:

c++ - 调用重载的 ‘<brace-enclosed initializer list>’ 与 suffices forpair 是不明确的

c++ - 如何在 GDB 中打印 C++ vector 的元素?

c++ - Windows 上来自 std::error_code 的 "unknown error"

c++ - 将嵌套类导入命名空间 - C++

c++ - 推导参数失败,适用于返回值

c++ - 如何在 C++ 中更新 map 的对象

c++ - 为什么我们不在 STL 的迭代器中传递星号 (*)

c++ - 为什么在 std::istream_iterator 上使用的 std::find_if 似乎返回最后一个元素?

c++ - 从文件中取出两个十六进制字符并存储为具有相关十六进制值的字符

c++ - Qt Creator - 设置架构标志