我有以下非常基本的问题.我想使用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()
迭代器是不变的.
提前致谢!
和...之间的不同
const vector<double>::iterator
Run Code Online (Sandbox Code Playgroud)
和
vector<double>::const_iterator
Run Code Online (Sandbox Code Playgroud)
是大致相同之间double * const v
和const 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)
它会编译并正确运行.