使用c ++ stl迭代器而不是传统指针的正确方法是什么?

kMa*_*ter 3 c++ stl

我有以下非常基本的问题.我想使用stl迭代器而不是传统的C类型指针来填充函数中的数组.通过C风格的方式我的意思是以下示例:

void f(double* v, size_t n) {
    for (int i = 0; i < n; i++) 
         v[i] = 10;    /* a more reasonable value in practice! */
}
Run Code Online (Sandbox Code Playgroud)

我会使用迭代器将其转换为C++样式,如下所示:

void f(vector<double>::const_iterator first, vector<double>::const_iterator last) {
    for(vector<double>::iterator it =  first; it != last; it++)
        *it = 10;
}
Run Code Online (Sandbox Code Playgroud)

但我得到编译错误.如果我用iterator而不是const_iterator问题就会解决.但是,我想知道这是否正确?因为我认为vector.begin()vector.end()迭代器是不变的.

提前致谢!

das*_*ght 5

和...之间的不同

const vector<double>::iterator
Run Code Online (Sandbox Code Playgroud)

vector<double>::const_iterator
Run Code Online (Sandbox Code Playgroud)

是大致相同之间double * const vconst double *v:

  • 第一个说迭代器必须保持不变,但它指向的东西可以改变
  • 第二个说迭代器本身是可变的,但它指的是什么const.

如果您将该函数重写为

void f(const vector<double>::iterator first, const vector<double>::iterator last) {
    for(vector<double>::iterator it =  first; it != last; it++)
        *it = 10;
}
Run Code Online (Sandbox Code Playgroud)

它会编译并正确运行.