在将一些代码行从 ANSI C 和数组转换为带有向量的 C++ 时,我遇到了一些问题。
为了沿数组元素迭代操作,在 ANSI C 中,我写道:
int i;
struct Sys{
double *v;
};
Sys sys; sys.v = malloc(10*sizeof(double));
//initialize the array with some values...
{...}
for (i = 5; i < 10; i++){ //overwrite the cumulative sum starting from position 4
sys.v[i] = sys.v[i] + function_that_return_a_double(i);
}
现在,我不会用向量在 C++ 中进行翻译。这是我的审判。
Sys {
vector<double> v;
};
Sys sys;
sys.v.resize(10);
// initialize the vector with some values...
{...}
for (vector<double>::iterator it = sys.v.begin() + 5; it != sys.v.end(); ++it){ //yyy
k = k+1;
tmp = function_that_return_a_double(k);
*it = *it + tmp; //xxx
}
但我收到以下错误:
code.cpp:xxx: error: name lookup of ‘it’ changed for ISO ‘for’ scoping
code.cpp:xxx: note: (if you use ‘-fpermissive’ G++ will accept your code)
如果我遵守 -fpermissive,我会得到:
code.cpp:xxx: warning: name lookup of ‘it’ changed for ISO ‘for’ scoping
code.cpp:yyy: warning: using obsolete binding at ‘it’
我不明白这是否是使用迭代器和 STD:vector 的正确方法
希望你能解决我的疑惑
干杯,
铝。
PS:我更正了 c++ 案例中 v 的声明。v 不是指针!PPS:代码片段很好!见下文。