У меня есть некоторая проблема при переводе некоторых строк кода из ANSI C и массивов в 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)
Если я complile с -fpermissive, я получаю:
code.cpp:xxx: warning: name lookup of ‘it’ changed for ISO ‘for’ scoping
code.cpp:yyy: warning: using obsolete binding at ‘it’
Я не undenstand, если это правильный путь использование итераторов и STD: вектор
Надеюсь, вы сможете решить мои сомнения,
Cheers,
Al.
PS: Я исправил объявление v в случае C++. v не является указателем! PPS: фрагмент кода в порядке! Смотри ниже.
Как 'sys.v.begin()' компилировать, когда 'v' является указателем? –
Кроме того, что такое 'Sys { vector * v; }; '? –
На самом деле вы начинаете с позиции 6. – JustSid