Я пытаюсь создать набор циклов с итераторами, и у меня возникают проблемы с некоторой арифметикой итератора (что я думал, что это возможно, но не работает).C++ список итератор арифметики?
Ниже приведен код:
for (list<Term>::iterator itr = final.begin(); itr != final.end(); itr++) {
for(list<Term>::iterator j = itr + 1; j != final.end(); j++) {
cout << itr->term << " " << j->term;
if(itr->term == j->term) {
//Do stuff
}
}
}
То, что я пытаюсь сделать, это J старт на следующем месте в очереди вдоль от ITR. Причина в том, что я не хочу проверять первый элемент против себя. Сама ошибка возникает из части кода, в которой я указал itr + 1
. Теперь я был уверен, что с указателями вы могли бы сделать арифметику следующим образом: почему она не работает с итератором списка (что по сути то же самое?)
Ошибка, которую я получаю из своей IDE, выглядит следующим образом: main.cpp:237:48: error: no match for ‘operator+’ in ‘itr + 1’
. Снова я думал, что вы можете сделать такую арифметику на итераторах, чтобы я не был уверен, что делать, чтобы сделать эту работу, есть ли альтернативная реализация, которую я мог бы попробовать?
Зачем вам вызывать' std :: advance' с постоянным аргументом 1, когда во всех случаях это возможно, так же как и '++'? –
Это трюк, спасибо! – Scott
@BenjaminLindley вы правы. ++ j будет лучше. – ForEveR