0

在将一些代码行从 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:代码片段很好!见下文。

4

1 回答 1

1

您需要声明Sys为结构或类:

struct Sys {
    vector<double> *v;
};

您正在尝试访问v,就好像它是矢量一样。使用->,因为它是指向 vector的指针。

Sys sys;
sys.v->resize(10);

for (vector<double>::iterator it = sys.v->begin(); it != sys.v->end(); ++it) {
    *it += function_that_returns_a_double(k); // Define k somewhere.
}
于 2013-06-13T01:04:57.930 回答