为什么vector迭代器没有显示operator= ?
Why is it showing no operator= for my vector iterator?
这是计算子数组的最大和的函数
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
由于将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
来获取
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 字符串-C++后显示的随机字符
- 继承期间显示未知行为的子类
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- 程序崩溃并显示"std::out_of_range"错误
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- 为什么在C的循环中使用printf的Rust代码不显示输出,而在C++的循环中显示std::cout
- 为什么 std::optional::operator=(U&&) 要求你是非标量类型?
- 从数据库实时显示QT c++中的数据
- 'operator='已弃用:改用 QDir::setPath()
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 显示错误输出的简单数组排序程序
- 过载'operator new'如何导致无限循环?
- Qt自定义QPush按钮未显示在布局上
- C++射线示踪剂ppm表示没有足够的数据来显示图像
- 为什么编译器显示错误"no match for 'operator[]' (operand types are 'carti' and 'int')"
- 我收到一条错误消息,显示"<<"标志"no operator matches these operands"
- 为什么vector迭代器没有显示operator= ?
- 为什么打印对象失败并显示"no match for 'operator<<'"错误?