I. Что такое vector?
vector — это последовательный контейнер, который инкапсулирует массив динамического размера. Как и любой другой тип контейнера, он может хранить объекты различных типов. Его можно просто рассматривать как динамический массив, который может хранить элементы любого типа.
II. Характеристики контейнера
1. Упорядоченная последовательность
Элементы в контейнере-последовательности располагаются в строгом линейном порядке. Доступ к соответствующему элементу можно получить по его позиции в последовательности.
2. Динамический массив
Поддерживает быстрый прямой доступ к любому элементу в последовательности, и это можно сделать даже с помощью арифметики указателей. Обеспечивает относительно быстрое добавление/удаление элементов в конце последовательности.
3. С поддержкой аллокатора
Контейнер использует объект-аллокатор для динамического управления своими потребностями в памяти.
III. Реализация основных функций
1. Конструкторы- vector(): создаёт пустой vector
- vector(int nSize): создаёт vector с nSize элементами
- vector(int nSize, const t& t): создаёт vector с nSize элементами, все со значением t
- vector(const vector&): конструктор копирования
- vector(begin,end): копирует элементы из другого массива в диапазоне [begin,end) в вектор
2. Функции добавления
- void push_back(const T& x): добавляет элемент X в конец вектора
- iterator insert(iterator it, const T& x): вставляет элемент x в вектор перед элементом, на который указывает итератор
- iterator insert(iterator it, int n, const T& x): вставляет n одинаковых элементов x в вектор перед элементом, на который указывает итератор
- iterator insert(iterator it, const_iterator first, const_iterator last): вставляет в вектор данные из другого вектора того же типа в диапазоне [first,last) перед элементом, на который указывает итератор
3. Функции удаления
- iterator erase(iterator it): удаляет из вектора элемент, на который указывает итератор
- iterator erase(iterator first, iterator last): удаляет из вектора элементы в диапазоне [first,last)
- void pop_back(): удаляет последний элемент в векторе
- void clear(): очищает все элементы в векторе
4. Функции обхода
- reference at(int pos): возвращает ссылку на элемент в позиции pos
- reference front(): возвращает ссылку на первый элемент
- reference back(): возвращает ссылку на последний элемент
- iterator begin(): возвращает указатель на начало вектора, указывающий на первый элемент
- iterator end(): возвращает указатель на конец вектора, указывающий на позицию после последнего элемента
- reverse_iterator rbegin(): обратный итератор, указывающий на последний элемент
- reverse_iterator rend(): обратный итератор, указывающий на позицию перед первым элементом
5. Функции проверки
- bool empty() const: определяет, пуст ли вектор; если пуст, в векторе нет элементов
6. Функции размера
- int size() const: возвращает количество элементов в векторе
- int capacity() const: возвращает максимальное количество элементов, которое текущий vector может содержать
- int max_size() const: возвращает максимально допустимое количество элементов в vector
7. Другие функции
- void swap(vector&): обменивает данные двух vector одного типа
- void assign(int n, const T& x): устанавливает значения первых n элементов в vector равными x
- void assign(const_iterator first, const_iterator last): устанавливает элементы в vector равными элементам в [first,last)
8. Для ясности
1. push_back: добавляет элемент данных в конец массива
2. pop_back: удаляет последний элемент данных из массива
3. at: возвращает данные по позиции с номером
4. begin: возвращает указатель на начало массива
5. end: возвращает указатель на позицию после последнего элемента массива
6. front: получает ссылку на начало массива
7. back: получает ссылку на последний элемент массива
8. max_size: получает максимально возможный размер вектора
9. capacity: текущий выделенный размер вектора
10. size: размер используемых в данный момент данных
11. resize: изменяет размер используемых в данный момент данных; если он больше текущего использования, заполняет их значениями по умолчанию
12. reserve: изменяет размер пространства, выделенного в данный момент для вектора
13. erase: удаляет элемент данных, на который указывает указатель
14. clear: очищает текущий вектор
15. rbegin: возвращает указатель начала обратного вектора (фактически, исходный end - 1)
16. rend: возвращает указатель конца обратного вектора (фактически, исходный begin - 1)
17. empty: определяет, пуст ли вектор
18. swap: обменивается данными с другим вектором
IV. Базовое использование
#include < vector> using namespace std;
V. Краткое введение
- Vector<type> идентификатор
- Vector<type> идентификатор(максимальная вместимость)
- Vector<type> идентификатор(максимальная вместимость, начальные значения всех элементов)
- Int i[5]={1,2,3,4,5}
Vector<type> vi(I, i+2); // получить значение после того, как значение индекса i равно 3 - Vector< vector< int> >v; // двумерный вектор. Примечание: внешние <> должны иметь пробел; иначе он не скомпилируется на старых компиляторах.
Пример
1. pop_back() & push_back(elem) пример: удаление и вставка данных в конце контейнера
Пример
Результат вывода:
0,1,2,3,4,5,6,7,8,9, 0,1,2,3,4,
2. clear() очищает все данные в контейнере
Пример
Результат вывода:
0,1,2,3,4,5,6,7,8,9,
3. Сортировка
Пример
Результат вывода:
从小到大: 0,1,3, 从大到小: 3,1,0,
1. Обратите внимание, что sort требует заголовочного файла#include <algorithm>
2. Если вы хотите, чтобы sort сортировал по убыванию, можно переписать sort
bool compare(int a,int b)
{
return a< b; //升序排列,如果改为return a>b,则为降序
}
int a[20]={2,4,1,23,5,76,0,43,24,65},i;
for(i=0;i<20;i++)
cout<< a[i]<< endl;
sort(a,a+20,compare);
4. Доступ (прямой доступ к массиву & доступ через итераторы)
Пример
Результат вывода:
直接利用数组:0 1 2 3 4 5 6 7 8 9 利用迭代器:0 1 2 3 4 5 6 7 8 9
5. Два способа определения двумерного массива (одинаковый результат)
Способ 1
Способ 2
Результат вывода:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Исходный адрес: http://blog.csdn.net/w_linux/article/details/71600574