Vector de C++ STL (Parte básica 1)

P1: ¿Qué es un vector?

Respuesta: Un vector es un contenedor, y un contenedor se utiliza para gestionar una colección de objetos de un determinado tipo . C++ proporciona varios tipos de contenedores, como deque, list, vector , map, etc. vector (vector), es unmatriz de longitud variable, es decir, una matriz que cambia automáticamente la longitud de la matriz (la longitud de la matriz se determina cuando se define y no se puede cambiar, mientras que la longitud del vector contenedor no es fija y se puede cambiar en cualquier momento )

P2: ¿Cómo usar el vector?

1. Agregue el archivo de encabezado

Al usar vector, debe agregarse #include <vector>antes de que pueda usarse normalmente (¡ este paso es muy importante! )

2. La definición de vector

vector<类型名> 变量名;
El nombre del tipo puede ser int, double, char, struct o contenedor STL: vector, set, queue

vector<int> name;
vector<double> name;
vector<char> name;
vector<struct node> name;
vector<vector<int> > name;//注意:> >之间要加空格
  • Una matriz vectorial es una matriz unidimensional
    (por vector<int> name;ejemplo, el nombre es equivalente al nombre de una matriz unidimensional que almacena variables enteras)
  • Si se define como una matriz de matrices vectoriales , es un resumen de matriz bidimensional
    (como vector<int> array[SZIE]; //二维变长数组) :
    Low-dimensional es la dirección de high-dimensional(Por ejemplo: en una matriz bidimensional, su forma unidimensional es la dirección )

3. Inicialización de vectores

  • Método 1 (método directo)
vector<int> v1={
    
    1,2,3,4,5};

En este momento, v1 es equivalente a una matriz unidimensional que contiene 5 elementos.
Nota: algunos compiladores de versiones no admiten dicha inicialización.

  • Método 2 (método de puntero de matriz)
   int a[5]={
    
    1,2,3,4,5};//先定义一个数组
   vector<int> v1(a,a+5);//注意末尾指针指向最后一个元素之后的位置
   //下面为遍历vector容器,输出结果,检测初始化结果是否正确
   for(int i=0;i<v1.size();i++) //v1.size()为获取容器的大小
       cout<<v1[i]<<' ';
   cout<<endl;
   **结果:1 2 3 4 5
  • Método 3 (n elementos)
vector<int> v2(3,6);//将三个6赋值给v2
    for(int i=0;i<v2.size();i++)
        cout<<v2[i]<<' ';
    cout<<endl;
    **结果:6 6 6
  • Método 4 (método de copia)
vector<int> v3(v1);//将vector容器v1作为参数传给v3,则v3容器中的数据和v1中相同
    for(int i=0;i<v3.size();i++)
        cout<<v3[i]<<' ';
    cout<<endl;
    **结果:1 2 3 4 5 

Nota: El v1 pasado como parámetro solo puede sertipo de vector, no puede ser un nombre de matriz

  • Método 5:Usar el método de asignación
//方法1(数组指针)
    vector<int> v4,v5,v6,v7;
    v4.assign(a,a+5);
    for(int i=0;i<v4.size();i++)
        cout<<v4[i]<<' ';
    cout<<endl;
    //方法2()
    v5.assign(4,10);
    for (int i = 0; i < v5.size(); ++i)
        cout<<v5[i]<<' ';
    cout<<endl;
    //方法3(容器赋值容器)
    v6.assign(v1.begin(),v1.end());
    for (int i = 0; i < v6.size(); ++i)
        cout<<v6[i]<<' ';
    cout<<endl;
    **结果:1 2 3 4 5 
           10 10 10 10 
           1 2 3 4 5 

**Reponer:**Tome la asignación de elementos de intervalo.
Por ejemplo, hay un contenedor de vectores numéricos v1 y v1={1,2,3,4,5}solo quiero {2,3}asignarlo al contenedor de vectores v2, entonces podemoscambiar la orientación del punteropara cambiar el rango de almacenamiento de la siguiente manera:

    v7.assign(v1.begin()+1,v1.end()-2);
    for (int i = 0; i < v7.size(); ++i) {
    
    
        cout<<v7[i]<<' ';
    }
    **结果:2 3

Nota: el puntero final apunta a la siguiente posición del elemento final ( por ejemplo, el puntero final aquí apunta al elemento 4 )

4. La salida del elemento contenedor vectorial

  • Una es acceder a los datos a través de un índice de subíndice, que es similar a una matriz. Si hay un contenedor vectorial v1, si desea acceder al primer elemento de v1, puede acceder a él a través de v1[0] , y así sucesivamente. Los códigos anteriores son todos métodos de índice de subíndice
  • El at()acceso de segundo uso, ver ejemplos:
    vector<int> v1;
    v1={
    
    1,2,3,4,5};
    for (int i = 0; i < v1.size(); ++i) {
    
    
        cout<<v1.at(i)<<' ';
    }
    cout<<endl;
    **结果:1 2 3 4 5 

expandir: Entonces, ¿cuál es la diferencia entre estos dos métodos de acceso?
Vector es una matriz dinámica. Como es una matriz, existe la posibilidad de cruzar el límite . Veamos un ejemplo:

  1. El método de índice de subíndice encuentra una situación de acceso fuera de los límites de la matriz
vector<int> v1;
   v1={
    
    1,2,3,4,5};
   cout<<v1[6]<<endl;
   **结果:-1038988976
  1. El método at() encuentra una situación de acceso fuera de los límites de la matriz
vector<int> v1;
   v1={
    
    1,2,3,4,5};
   cout<<v1.at(6)<<endl;
   **结果:terminate called after throwing an instance of 'std::out_of_range'

Aquí podemos ver que el método de subíndice no informará un error cuando la matriz esté fuera de los límites , pero generará caracteres ilegibles, pero at()el método informará el tipo incorrecto , por lo que at()el método es más propicio para encontrar errores de código.

Vector de C++STL (Parte básica 2)

Supongo que te gusta

Origin blog.csdn.net/weixin_74334323/article/details/130171281
Recomendado
Clasificación