Справочник по C/C++
Примеры использования STL

Контейнеры, алгоритмы и итераторы работают "в одной команде". Чтобы понять, как это происходит, рассмотрим пример. В следующей программе демонстрируется использование контейнера vector, который аналогичен массиву. Однако контейнер имеет одно преимущество, заключающееся в том, что он автоматически обрабатывает собственные потребности в памяти, наращивая при необходимости свои объемы. Вектор предоставляет методы, позволяющие определять его размер, а также добавлять новые или удалять ненужные элементы.

Итак, следующая программа иллюстрирует использование класса vector.

// Короткая программа демонстрации
// работы класса vector,
#include <iostream>
#include <vector>
using namespace std;

int main()
{
	vector<int> v; // создаем вектор нулевой длины
	int i;

	// Отображаем исходный размер объекта v.
	cout << "размер = " << v.size() << endl;

	/* Помещаем значения в конец вектора:
	вектор будет расти по мере необходимости.*/
	for(i=0; i<10; i++) v.push_back(i);
	
	// Отображаем текущий размер объекта v.
	cout << "размер сейчас = " << v.sized << endl;

	// Доступ к содержимому вектора можно получить, используя индексы.
	for(i=0; i<10; i++) cout << v[i] << " ";
	cout << endl;

	// Доступ к первому и последнему элементам вектора.
	cout << "первый = " << v.front() << endl;
	cout << "последний = " << v.back() << endl;

	// Доступ через итератор.
	vector<int>: : iterator p = v.begin();
	while (p != v.end()) {
	cout << *p << " " ;
	p++;

	return 0;
}

Ниже показан результат работы этой программы.

размер = 0
размер сейчас =10
0123456789
первый = 0
последний = 9
0123456789

В этой программе вначале создается вектор нулевой длины. Функция-член push_back() помещает значения в конец вектора, увеличивая тем самым его размер по мере необходимости. Функция size() отображает текущий размер вектора. Вектор может быть индексирован подобно обычному массиву. К его содержимому можно также получить доступ с помощью итератора. Функция begin() возвращает итератор в начало вектора, а функция end() - в конец вектора.

И еще одно: обратите внимание на объявление итератора р. Тип iterator определяется несколькими контейнерными классами.

Вот ещё один пример

typedef Object *OBJECT;
//Определяем тип данных списка MyList в котором будут хранится указатели
typedef std::list<OBJECT> MyList;
//Определяем тип данных итератора который будет работать с указателеми на объекты типа Object
typedef std::list<OBJECT>::iterator MyListIterator;

MyList List;		//Наш список объектов
Object* cObject;	//Ссылка на конкретный объект

...

MyListIterator iterator = List.begin();  //Берём первый элемент:

//Цикл обхода каждого элемента
while(iterator != List.end()){
	cObject=*iterator;	//используем указатель cObject для ссылки на объект
	cObject->myAction();	//Выполняем метод myAction объекта Object
	iterator++;		//Берём следующий элемент
}


Реклама