вектор — это тип контейнера, в котором элементы хранятся линейно слева направо. Это что-то вроде массива. Разница между вектором и массивом заключается в том, что вектор может динамически изменять свой размер во время выполнения. Это поможет иметь эффективную память.
Вы можете использовать вектор, включив файл заголовка вектора, написав: #include ‹vector›.
вы можете объявить вектор, сказав:
вектор ‹тип данных› имя вектора;
Тип векторных данных может быть любым, например, int, float, string, char, double и т. д.
вы также можете указать размер при объявлении:
вектор ‹тип данных› имя_вектора (размер) ;
векторы могут быть инициализированы напрямую или во время выполнения.
vector ‹тип данных› vector_name= { element1, element2, … };
вектор ‹тип данных› имя_вектора (размер, элемент) ;
#include <iostream> #include <vector> // header file using namespace std; int main() { // different ways to declare a vector vector<int>v; // declares a vector called v vector<string>v2(3); //declares a vector called v2 with the size 3 vector<char>v3 = {1,2,3};//a vector called v3 which include elements 1,2,3 vector<float>v4(10,'a');/*creates a vector with 10 elements and all of the are 'a' */ }
Итератор
Вектор использует итератор произвольного доступа. Это дает:
- возможность доступа к любому элементу за постоянное время O(1).
- Эффективно изменяйте или удаляйте элементы из контейнера.
Список итераторов
- begin(): итератор, указывающий на первый элемент вектора.
- end(): итератор, указывающий на позицию после последнего элемента в векторе.
Постоянные итераторы — это итераторы «только для чтения». Это означает, что эти типы итераторов проходят через вектор, не модифицируя и не внося никаких изменений в элементы вектора.
- cbeging(): постоянный итератор, указывающий на первый элемент вектора.
- cend(): постоянный итератор, указывающий на последний элемент вектора.
Используя константные итераторы, вы избежите случайного изменения элементов вектора.
Обратные итераторы подобны воображаемому обращению вектора. Элемент в начале теперь в конце, а элемент в конце в начале. Есть два обратных итератора rbegin и rend.
- rbegin(): (обратное начало) указывает на последний элемент в исходном векторе, который является первым элементом в обращенном векторе.
- rend(): (обратный конец) указывает на первый элемент вектора
Краткое примечание: доступ к следующему элементу при использовании rbegin осуществляется путем увеличения (++), а доступ к предыдущему элементу — путем уменьшения (— —).
Доступ к следующему элементу при использовании «rend» осуществляется путем уменьшения (— —), а доступ к следующему элементу при использовании «rbegin» — путем увеличения (++).
Доступ к элементам вектора
Вы можете получить доступ к элементам вектора:
- используя индекс элемента
#include <iostream> #include <vector> using namespace std; int main() { vector<int> v = {1, 2, 3}; cout << v[2]; } output = 3
- front ( ) : доступ к первому элементу вектора. Не принимает никаких аргументов
- назад ( ): доступ к последнему элементу вектора. Не принимает никаких аргументов
- at(): доступ к элементу по заданному индексу. принимает один аргумент, который является индексом.
#include <iostream> #include <vector> using namespace std; int main() { vector<int> v = {1, 2, 3}; cout<<"front = "<<v.front()<<endl; cout<<"back = "<<v.back()<<endl; cout<<"at = "<<v.at(1)<<endl; } output: front = 1 back = 3 at = 2
Добавление и удаление элементов
- push_back(): добавить элемент в конец вектора. Он принимает один аргумент, который является элементом, который нам нужно добавить.
- insert(): добавить элемент в любое место внутри вектора. Он принимает два аргумента: местоположение (заданное в форме итератора) и элемент. см. код для лучшего понимания
#include <iostream> #include <vector> using namespace std; int main() { vector<int> v = {1, 2, 3}; v.push_back(4); // adds 4 to to the end .... v = {1,2,3,4} v.insert(v.begin()+1,7);// adds 7 to the 2nd position. for(int i =0;i<5;i++) cout<<v[i]<<" "; // to print elements of a vector } output: 1 7 2 3 4
- pop_back(): удаляет элемент в конце вектора.
- Erase(): удаляет элемент в заданной позиции или элементы в заданном интервале. (используется с итераторами)
#include <iostream> #include <vector> using namespace std; int main() { vector<int> v = {1, 2, 3,4,5,6}; v. erase(v.begin()+4); // removes the element at the 5th position. for(int i =0;i<5;i++) cout<<v[i]<<" "; // to print elements of a vector } output: 1 2 3 4 6 #include <iostream> #include <vector> using namespace std; int main() { vector<int> v = {1, 2, 3,4,5,6}; v. erase(v.begin()+2,v.begin()+4); /*removes the element from position 3 up to but not including position 5 */ for(int i =0;i<4;i++) cout<<v[i]<<" "; // to print elements of a vector } Output: 1 2 5 6
Емкость
- size(): возвращает количество элементов внутри вектора.
- capacity(): возвращает память, выделенную для вектора, и максимальное количество элементов, которые он может содержать без перераспределения памяти.
#include <iostream> #include<vector> using namespace std; int main() { vector<int> myVector; for (int i = 1; i <= 10; ++i) { myVector.push_back(i); std::cout << "Size: " << myVector.size() << ", Capacity: " << myVector.capacity() << std::endl; } return 0; } output: Size: 1, Capacity: 1 Size: 2, Capacity: 2 Size: 3, Capacity: 4 Size: 4, Capacity: 4 Size: 5, Capacity: 8 Size: 6, Capacity: 8 Size: 7, Capacity: 8 Size: 8, Capacity: 8 Size: 9, Capacity: 16 Size: 10, Capacity: 16