无法分配向量迭代器
Cannot assign a vector iterator
我无法在下面的代码中使用 =operator,因为我遇到了编译器错误。我不明白哪里出了问题。
int CProcessData::calculateMidPoints(const std::vector<double>& xv, const std::vector<double>& yv)
{
if((0 == xv.size()) || (0 == yv.size()))
return 1;
std::vector<double>::iterator it;
for (it = xv.begin(); it < xv.end(); it++)
{
}
return 0;
}
我收到以下错误:
../src/CProcessData.cpp: In member function ‘int CProcessData::calculateMidPoints(const std::vector<double>&, const std::vector<double>&)’:
../src/CProcessData.cpp:44:9: error: no match for ‘operator=’ (operand types are ‘std::vector<double>::iterator {aka __gnu_cxx::__normal_iterator<double*, std::vector<double> >}’ and ‘__gnu_cxx::__normal_iterator<const double*, std::vector<double> >’)
我愿意提供所有帮助!
xv
是一个const
引用,意思是在里面只能调用const
个成员函数。 std::vector<double>::begin()
returns 和 const_iterator
的 const
重载不能用于构造 iterator
,因为它会破坏 const-coreectness。
所以你需要
std::vector<double>::const_iterator it;
请注意,从 C++11 开始,您还有其他选择:
for (auto it = xv.begin(); it < xv.end(); it++)
或者,如果您要遍历所有元素,基于范围的循环可能会更好:
for (auto x: xv) { ... // x is a copy
for (auto& x: xv) { ... // x is a reference
我无法在下面的代码中使用 =operator,因为我遇到了编译器错误。我不明白哪里出了问题。
int CProcessData::calculateMidPoints(const std::vector<double>& xv, const std::vector<double>& yv)
{
if((0 == xv.size()) || (0 == yv.size()))
return 1;
std::vector<double>::iterator it;
for (it = xv.begin(); it < xv.end(); it++)
{
}
return 0;
}
我收到以下错误:
../src/CProcessData.cpp: In member function ‘int CProcessData::calculateMidPoints(const std::vector<double>&, const std::vector<double>&)’:
../src/CProcessData.cpp:44:9: error: no match for ‘operator=’ (operand types are ‘std::vector<double>::iterator {aka __gnu_cxx::__normal_iterator<double*, std::vector<double> >}’ and ‘__gnu_cxx::__normal_iterator<const double*, std::vector<double> >’)
我愿意提供所有帮助!
xv
是一个const
引用,意思是在里面只能调用const
个成员函数。 std::vector<double>::begin()
returns 和 const_iterator
的 const
重载不能用于构造 iterator
,因为它会破坏 const-coreectness。
所以你需要
std::vector<double>::const_iterator it;
请注意,从 C++11 开始,您还有其他选择:
for (auto it = xv.begin(); it < xv.end(); it++)
或者,如果您要遍历所有元素,基于范围的循环可能会更好:
for (auto x: xv) { ... // x is a copy
for (auto& x: xv) { ... // x is a reference