Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Пример. Работа с контейнером vector



Определяем пустой вектор:

vector< int > arr;

Затем добавляем к нему элементы при помощи различных функций. Например, функция push_back()вставляет элемент в конец вектора. Вот фрагмент кода, считывающего последовательность чисел и добавляющего их в вектор:

int i;for (i=1; i<9; i++) { arr.push_back(i); //...}

Хотя мы можем использовать операцию взятия индекса для перебора элементов вектора:

cout << "считаны числа: \n";for (int ix =0; ix < arr.size(); ++ix) cout << arr [ ix ] << ' ';cout << endl;

удобнее использовать итераторы:

cout << "считаны числа: \n";for (vector<int>::iterator it = arr.begin(); it!= arr.end(); ++it) cout << *it << ' ';cout << endl;

Итератор — это класс стандартной библиотеки, фактически являющийся указателем на элемент массива.

Выражение

*it;

разыменовывает итератор и дает сам элемент вектора. Инструкция

++it;

сдвигает указатель на следующий элемент. Не нужно смешивать эти два подхода. Если следовать идиоме STL при определении пустого вектора:

vector<int> ivec;

будет ошибкой написать:

ivec[0] = 1024;

У нас еще нет ни одного элемента вектора ivec; количество элементов выясняется с помощью функции size().

Можно допустить и противоположную ошибку. Если мы определили вектор некоторого размера, например:

vector<int> ia(10);

то вставка элементов увеличивает его размер, добавляя новые элементы к существующим. Хотя это и кажется очевидным, тем не менее, начинающий программист вполне мог бы написать:

const int size = 7;int ia[ size ] = { 0, 1, 1, 2, 3, 5, 8 };vector< int > ivec(size);for (int ix = 0; ix < size; ++ix) ivec.push_back(ia[ ix ]);

Имелась в виду инициализация вектора ivec значениями элементов ia, вместо чего получился вектор ivec размера 14.





Дата публикования: 2015-01-13; Прочитано: 209 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.005 с)...