Я использовал advance
на некоторых итераторах
, но я боюсь возможной чехарды выше end ()
. Я хотел бы, чтобы мои итераторы оставались между границами, Я подумал о расстоянии
, но похоже, что оно не возвращает то, что я ожидал (неположительные значения, когда итераторы превышают end ()
). Как убедиться, что здесь нет чехарда?
#include <iostream>
#include <iterator>
#include <list>
using namespace std;
int main () {
list<int> mylist;
for (int i=0; i<10; i++) mylist.push_back (i*10);
list<int>::const_iterator first = mylist.begin();
const list<int>::const_iterator last = mylist.end();
cout << "The distance is: " << distance(first,last) << endl; // 10
advance(first, 10);
cout << "The distance is: " << distance(first,last) << endl; // 0
advance(first, 1);
cout << "The distance is: " << distance(first,last) << endl; // 10
advance(first, 10);
cout << "The distance is: " << distance(first,last) << endl; // 0
return 0;
}
Вот результат:
The distance is: 10
The distance is: 0
The distance is: 10
The distance is: 0