Библиотека STL (Standart Template Library)
Страница 6. Знакомимся с вектором


Знакомимся с вектором

Вектор (vector) напоминает нам массив, только он способен расти до произвольного размера, поддерживает информацию о размере. Как и массив к вектору можно обратить воспользовавшись операцией индексирования []. Вот характеристики:

  • Доступ к данных с одинаковой скоростью
  • Вставка приводит к перемещению элементов
  • При расширении данные копируються в другой блок

Как видите вектор оптимален для получения информации, но при большом количестве вставок лучше воспользоваться другими контейнерами, например, списками. Проблема в том, что физически вектор распологается в непрерывной памяти. На C это реализовывали функциями malloc.

Для работы с вектором необходимо подключить заголовочный файл:

#include "vector"

Объявить рабочую область:

using namespace std;

После этого вектор необходимо объявить, это можно сделать двумя способами.

vector< int > vArray1;
vector< int > vArray2(30);

В первом случае указывается пустой вектор, а во втором начальный размер.

Можно получать информацию о параметрах вектора:

  • size() - сколько данных храниться
  • capacity() - сколько может храниться до изменения размера
  • max_size() - максимальный размер обычно равен наиболее большому доступному блоку памяти

Смотрим пример:

// TestVector.cpp : Defines the entry point for the console application.
//


#include "stdafx.h"
#include "vector"
#include "iostream.h"

using namespace std;

void main()
{
vector vArray1;
vector vArray2(30);
cout << "Size Vector " << vArray2.size() << endl;
cout << "Capacity Vector " << vArray2.capacity() << endl;
cout << "Max_Size Vector " << vArray2.max_size() << endl;
for (int x=1;x<5;x++)
vArray2.push_back(10);
cout << "Size Vector " << vArray2.size() << endl;
cout << "Capacity Vector " << vArray2.capacity() << endl;
cout << "Max_Size Vector " << vArray2.max_size() << endl;
}

А вот результат:

Size Vector 30
Capacity Vector 30
Max_Size Vector 1073741823
Size Vector 34
Capacity Vector 60
Max_Size Vector 1073741823
Press any key to continue

Как видите Size показывает сколько сейчас лежит в векторе чисел. В то время как capacity возвращает инициализированный размер, то есть тот размер, до которого можно добавлять данные без инициализации. Вас не удивило, что размер доступной памяти не изменился ??? Это размер доступного блока, а не всей памяти поэтому он и не изменился.

 
« Предыдущая статья   Следующая статья »