繁体   English   中英

无法分配向量迭代器

[英]Cannot assign a vector iterator

我无法在下面的代码中使用= operator,因为我遇到了compiller错误。 我不明白怎么了。

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()const重载返回const_iterator ,不能用于构造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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM