Directorio de artículos
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
(porvector<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
(comovector<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:
- 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
- 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.