В контейнерах, зв’язаних з ітераторами довільного доступу (векторах і чергах з двостороннім доступом), ітерація відбувається дуже просто за допомогою оператора []. Такі контейнери, як списки, що не підтримують довільного доступу, вимагають особливого підходу. Раніше ми використовували «деструктивне читання» (читання з руйнуванням даних) для виведення і одночасного виштовхування елементів ітератора. Практичніше було б визначити ітератор для контейнера. Розглянемо приклад 15.17.
#include<iostream>
#include<conio>
#include<list>
#include<algorithm>
using namespace std;
int main()
{
int arr[]={2,4,6,8};
list<int>thelist;
for(int k=0;k<4;k++)
thelist.push_back(arr[k]);//заповнити список масивом
list<int>::iterator iter; //ітератор для цілочисельного списку
for(iter=thelist.begin();iter!=thelist.end();iter++)
cout<<*iter<<" "; //вивести список
cout<<endl;
getch();
return 0;
}
Програма 15.17
Програма просто виводить вміст контейнера thelist.

Ми визначаємо ітератор типу list<int>, що відповідає типу контейнера. Як і у випадку зі змінною-вказівником, до початку використання ітератора слід задати його значення. В циклі for проходить його ініціалізація значенням методу thelist.begin, це вказівник на початок контейнера. Ітератор може бути інкрементований оператором ++ для проходження по елементах, а оператором * можна здійснити його «розадресацію». Можна навіть порівнювати його з чим-небудь за допомогою оператора != і виходити з циклу при досягненні ітератором кінця контейнера.