c++ - 从const方法返回一对 vector 迭代器

标签 c++ class vector

我尝试从const方法返回一对 vector 迭代器。

pair<vector<double>::iterator, vector<double>::iterator> Matrix::GetColumn(int j) const {
  return pair<vector<double>::iterator, vector<double>::iterator>(values_.begin() + j * height_,
                                                                  values_.begin() + (j + 1) * height_);
}
编译时出现以下错误
matrix.cc:119:133: error: no matching function for call to ‘std::pair<__gnu_cxx::__normal_iterator<double*, std::vector<double> >, __gnu_cxx::__normal_iterator<double*, std::vector<double> > >::pair(__gnu_cxx::__normal_iterator<const double*, std::vector<double> >, __gnu_cxx::__normal_iterator<const double*, std::vector<double> >)’
   return pair<vector<double>::iterator, vector<double>::iterator>(values_.begin() + j * height_, values_.begin() + (j + 1) * height_);
                                                                                                                                     ^
迭代器是vector<double>开头和结尾的指针,允许用户编辑 vector 中的值。 AFAIK这不是const的范围吗?
该类如下所示:
class Matrix {
    int height_;
    int width_;
    vector<double> values_;
}
当我删除const时,错误消失了。

最佳答案

const函数无法更改类的状态,因此只能返回const_iterator。
如果要返回一个非常量迭代器,则会产生副作用,使外部作用域(调用代码)可以改变类的状态。这意味着const函数允许修改类的状态,即使它是间接的(即不在该函数的范围之内)。
这破坏了const关键字所隐含的约定。

关于c++ - 从const方法返回一对 vector 迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62950529/

相关文章:

c++ - 变量声明中的 U 后缀

c++ - 使用 glm::unproject() 获取 Z = 0 平面上的光标位置?

c++ - 大多数基本类型的高效二进制序列化

c++ - BinaryNode 和 oldNode 未在此范围内声明

c++ - 使用指针和动态数组类

haskell - 如何用 Haskell 向量编写并行代码?

javascript - 如何使用 JavaScript 中的 OpenStreetMap XML 管理全矢量离线 map ?

c++ - vector 比较失败

html - powershell ConvertTo-Html 添加类

c++ - 如何制作模板结构 vector