вектор — это тип контейнера, в котором элементы хранятся линейно слева направо. Это что-то вроде массива. Разница между вектором и массивом заключается в том, что вектор может динамически изменять свой размер во время выполнения. Это поможет иметь эффективную память.

Вы можете использовать вектор, включив файл заголовка вектора, написав: #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