Страница 6 из 12
Знакомимся с вектором Вектор (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 возвращает инициализированный размер, то есть тот размер, до которого можно добавлять данные без инициализации. Вас не удивило, что размер доступной памяти не изменился ??? Это размер доступного блока, а не всей памяти поэтому он и не изменился. |