El estudio de C ++ señala la lista de vectores de contenedores de ocho secuencias deque

1. ¿Qué es un contenedor secuencial?
Los elementos del contenedor de secuencia se almacenan y se accede a ellos según su ubicación . Además de los contenedores secuenciales, la biblioteca estándar también define varios contenedores asociativos cuyos elementos están ordenados por claves. Por ejemplo, el tipo de vector de la biblioteca estándar es un contenedor secuencial. Reúne elementos de un solo tipo en un contenedor y luego almacena y accede a estos elementos de acuerdo con sus posiciones. Este es el contenedor secuencial. La biblioteca estándar define tres tipos de contenedores secuenciales: lista de vectores y deque.
Los siguientes son varios tipos de contenedores secuenciales

vector // 支持快速随机访问
list  //支持快速删除插入
deque //双端队列

1.1 Definición de contenedor secuencial
Cuando se utilizan varios contenedores, primero se deben incluir los archivos de encabezado relevantes

# include<vector>
# include <list>
# include<deque>

Todos los contenedores son plantillas de clase. Para definir un contenedor especial, debe agregar un par de paréntesis angulares después del nombre del contenedor. Los corchetes angulares proporcionan el tipo de elementos almacenados en el contenedor. Como es definido debajo

vector<int> a;
list<string> b;
deque<double> items;

1.2 Inicialización de elementos en el contenedor

vector<int> c;//创建一个名为c的vector容器,用于存放int 类型数据
vector<int> c(b);//创建容器b的副本c,c和b必须具有相同的容器类型,并存放相同类型的元素,适用于所有容器。
vector<int> c(n,t);  //用n个值为t的元素创建容器C,其中值t必须是容器c的元素类型的值。
vector<int> c(n);创建有n个值初始化元素容器C(只适用于顺序容器)

1.3 Inicialización como copia de una sección de elementos
Aunque no es posible asignar directamente elementos en un tipo de contenedor a otro tipo de contenedor, el sistema permite la implementación indirecta de funciones pasando un par de iteradores.
El iterador marca el rango de elementos a copiar y estos elementos se utilizan para inicializar los elementos del nuevo contenedor. El iterador marca el primer y último elemento a copiar.

list<string> slist(svec.begin(),svec.end());//svec为已经定义好的容器
int a[]={
    
    0,1,2,3,4,5}
vector<int> s(a,a+3);//s[0]=0,s[1]=1,s[2]=2,s[3]=3;

1.4 Iteradores y el alcance
de los iteradores Los iteradores size_type y iterator type se han mencionado en artículos anteriores. Todos los iteradores de contenedor admiten la lectura de un elemento del contenedor mediante la operación de eliminación de referencias. Las siguientes son operaciones de iterador de uso común

*iter //返回迭代器iter所指向的元素引用
++iter //给iter加1,使其指向容器内下一个元素
--iter //给iter减1,使其指向容器的前一个元素

El iterador del contenedor de lista no admite operaciones aritméticas (suma o resta) ni operaciones relacionales (<=, <,> =). Solo proporciona operaciones de pre y post incremento, decremento e igualdad.
Hay un problema en el manual de c ++. Por favor, muestre los elementos en el contenedor de lista en orden inverso.
Si desea probar el siguiente resultado

int a[] = {
    
    1,2,3,4,5,6};
	list<int> test(a, a + 2);
	int c = test.size();
	list<int>::iterator first = test.begin();
		while (first != test.end())
		{
    
    
			int i = 0;
			c = c - i;
			cout << *(first + c);
			first++;
			i++;
		}

Luego se informará un error. También se mencionó el motivo del error. El iterador de la lista no se puede sumar ni restar. La forma correcta es la siguiente

#include <iostream>
# include <string>
# include <vector>
# include <list>
using namespace std;
int main()
{
    
    
	int a[] = {
    
    1,2,3,4,5,6};
	vector<int> han(a,a+2);
	list<int> test(a, a + 6);
	list<int> ::iterator  first= test.begin();
	list<int> ::iterator  end = test.end();
	while (first != end)
	{
    
    
		cout << "the result is" << *(--end) << endl;
	}

}

El resultado de la operación se muestra en la Figura
Inserte la descripción de la imagen aquí
1.5. Los miembros begin () y end () del contenedor secuencial

c.begin() //返回一个迭代器,他指向容器c的第一个元素
c.front() //返回一个元素值,第一个元素的引用u
c.back() //返回容器c的最后一个元素的引用,最后一个元素的值,可以直接输出
c.end() //返回一个迭代器,它指向元素最后一个位置的下一个位置
c.at(0)//引用第一个元素,除了下标运用外也可以采取该方式

Agregar elementos al contenedor de secuencia mencionó la aplicación antes: push_back, todos los contenedores de secuencia admiten push_back, proporcionando la función de insertar un elemento al final del contenedor.

c.push_back(t) //在容器c的尾部添加值为t的元素,返回void类型
c.push_front(t) //在容器c的前端添加值为t的元素,返回void类型
//只适用于list 和 deque容器类型

c.insert(p,t) //在迭代器p所指向的元素面前插入值为t的新元素。返回指向新添加元素的迭代器
c.insert(p,n,t)//在迭代器p所指向的元素面前插入n个值为t的元素,返回void类型
//插入一段元素
c.insert(p,b,e)//在迭代器P所指向的元素面前插入有迭代器b和e标记范围内的元素。返回void

1.6 Operación de tamaño de contenedor

//顺序容器大小操作
c.size()// 返回容器中元素个数,返回的类型为 c::size_type
c.max_size() //返回容器c可容纳的最多元素个数,返回的类型为 c::size_type
c.resize(n) //调整容器c的长度大小,使其容纳n个元素,如果n<c.size(),则删除多余的元素。否则,添加采用值初始化的新元素。
c.empty() //返回标记容器大小是否为0的布尔值 

1.7 Eliminar elementos

c.erase(p) //删除迭代器p所指向的元素,返回一个迭代器,指向被删除元素后面的元素,如果p本身就是指向超出末端的下一位置的迭代器,则该函数未定义
c.erase(b,e) //删除迭代器b和e所标记的范围内所有的元素,返回一个迭代器
c.clear() //删除容器内所有元素,返回void
c.pop_back(); //删除容器内最后一个元素
c.pop_front() //删除容器c的第一个元素。返回void

Supongo que te gusta

Origin blog.csdn.net/qq_41803340/article/details/108815887
Recomendado
Clasificación