2015-08-10 4 views
2

Есть ли способ, где я могу написать эту for петлюC++ по модулю итератор в цикле

vector<int> vec{1,2,3,4,5,6}; 
for (int i=0; i<vec.size(); ++i) 
    float result = vec[i]-vec[(i+1)%vec.size()];//Subtract vec[0] from vec[5] in last iteration. 

в версии с итераторы? Таким образом, что-то вроде этого:

vector<int> vec{1,2,3,4,5,6}; 
for (vector<int>::iterator it=vec.begin(); it!=vec.end(); ++it) 
    float result = *it - *((it+1)%vec.size()); 
+2

'it + 1 == vec.end()? vec.begin(): it + 1' –

ответ

2

Вы можете использовать тройную ?: оператора и выбрать либо begin или it + 1 в зависимости от того, является ли текущий it итератор указывает на элемент предыдущего до конца или нет:

for (auto it = vec.begin(); it != vec.end(); ++it) { 
    float result = *it - *((it + 1 == vec.end()) ? vec.begin() : it + 1); 
} 

Live demo

+0

Работает как очарование. Спасибо! – SemtexB

0

Я думаю, что если бы я сделать это таким образом, я думаю, что я бы написать

for (auto i1 = vec.end() - 1, i2 = vec.begin(); i2 != vec.end(); i1 = i2++) { 
    result = *i1 - *i2; 
} 
Смежные вопросы