Contenedor deque de C ++ Xiaobai


Prefacio

Hoy es 30 de septiembre y mañana es el Día Nacional. Antes de las vacaciones, ordenaré el contenido del contenedor de C ++ que aprendí esta semana. Esta semana aprendí sobre el contenedor deque. Deque es una matriz de dos extremos que puede insertar y eliminar la cabecera. Las funciones del contenedor deque específico se organizan de la siguiente manera:


Uno, el concepto básico de contenedor deque

1. Función: matriz de dos extremos, que puede insertar y eliminar el cabezal, que es muy flexible y se puede utilizar de forma flexible según la situación real.
2. La diferencia entre deque y vector: El
vector es ineficiente para la inserción y eliminación del encabezado, cuanto mayor es el volumen de datos, menor es la eficiencia.
En términos relativos, deque inserta y elimina la cabeza más rápido que el vector.
Vector accede a los elementos más rápido que deque.
3. Diagrama esquemático interno:

Inserte la descripción de la imagen aquí
4. El principio de funcionamiento de
deque : hay un controlador central dentro de deque, que mantiene el contenido de cada búfer, y los datos reales se almacenan en el búfer.
El controlador central mantiene la dirección de cada búfer, haciendo que parezca un espacio de memoria continuo cuando se usa deque.

Inserte la descripción de la imagen aquí
El iterador del contenedor deque también admite el acceso aleatorio.

Dos, constructor deque

1. Descripción de la función:
Estructura de contenedor deque.

2. Prototipo de función:

deque<T> deqT;            默认构造形式
deque(beg,end);           构造函数将[beg,end)区间中元素拷贝给本身
deque(n,elem);            构造函数将n个elem拷贝给本身
deque(const deque &deq);  拷贝构造函数

3. Ejemplo de demostración de código:

#include<iostream>
using namespace std;
#include<deque>
//deque 构造函数

void printDeque(deque<int>&d)
{
    
    
	for(deque<int>::iterator it =d.begin();it!=d.end();it++)
	{
    
    
	//*it=100;//将*it重新赋值为100,则会输出10个100
	cout<<*it<<" ";
	}
	cout<<endl;
}


void test01()
{
    
    
	//默认构造形式
	deque<int>dl;
	for(int i=0;i<10;i++)
	{
    
    
		dl.push_back(i);
	}
	printDeque(dl);


	//构造函数将[beg,end)区间中的元素拷贝给本身
	deque<int>d2(dl.begin(),dl.end());
	printDeque(d2);

	//构造函数将n个elem拷贝给本身
	deque<int>d3(10,100);
	printDeque(d3);

	//拷贝构造函数
	deque<int>d4=d3;
	printDeque(d4);

	//总结:deque容器和vector容器的构造方式几乎一致,灵活使用即可

}


int main()
{
    
    
	test01();


system("pause");
return 0;
}

3. Operación de cesión de deque

1. Descripción de la función:
Asignar valores al contenedor deque.

2. Prototipo de función:

deque& operator=(const deque &deq);      重载等号操作符
assign(beg,end);[beg,end)区间中的数据拷贝赋值给本身
assign(n,elem);                          将n个elem拷贝赋值给本身

3. Ejemplo de demostración de código:

#include<iostream>
using namespace std;
#include<deque>

void printDeque(const deque<int>&d)
{
    
    

	for(deque<int>::const_iterator it =d.begin();it!=d.end();it++)
	{
    
    
	cout<<*it<<" ";
	}
	cout<<endl;
}

//deque容器赋值操作
void test01()
{
    
    
 deque<int>dl;
for(int i=0;i<10;i++)
{
    
    
	dl.push_back(i);
}
printDeque(dl);

//operator= 赋值
deque<int>d2;
d2=dl;
printDeque(d2);


//assign赋值
deque<int>d3;
d3.assign(dl.begin(),dl.end());
printDeque(d3);


deque<int>d4;
d4.assign(10,100);
printDeque(d4);


//总结:deque赋值操作也与vector相同,需熟练掌握

}

int main()
{
    
    

	test01();

system("pause");
return 0;
}

4. Operación de tamaño de deque

1. Descripción de la función:
opera el tamaño del contenedor deque.

2. Prototipo de función:

deque.empty();            判断容器是否为空
deque.size();             返回容器中元素的个数
deque.resize(num);        重新指定容器的长度为num,若容器变长,则默认值填充新位置,
                          若容器变短,则末尾值超出容器长度的元素被删除
deque.resize(num,elem);   重新指定容器的长度为num,若容器边长,则以elem值填充新位置,
                          如果容器变短,则末尾超出容器长度的元素被删除

3. Ejemplo de demostración de código:

#include<iostream>
using namespace std;
#include<deque>

//deque容器大小操作
void printDeque(const deque<int>&d)
{
    
    

	for(deque<int>::const_iterator it = d.begin();it!=d.end();it++)
	{
    
    
	cout<<*it<<" ";
	}
	cout<<endl;

}

void test01()
{
    
    
	deque<int>dl;
	for(int i=0;i<10;i++)
	{
    
    
		dl.push_back(i);
	}
	printDeque(dl);

	if(dl.empty())
	{
    
    
	cout<<"dl为空:"<<endl;
	}
	else
	{
    
    
	cout<<"dl不为空:"<<endl;
	cout<<"dl的大小为:"<<dl.size()<<endl;
	//deque容器没有容量概念
	}


	//重新指定大小
	//dl.resize(15);
	dl.resize(15,2);
	printDeque(dl);

	/*总结:deque没有容量的概念
	判断是否为空 --- empty
	返回元素个数 --- size
	重新指定个数 --- resize*/
}

int main()
{
    
    
	test01();


system("pause");
return 0;
}

5. Inserción y eliminación de deque

1. Descripción de la función:
insertar y eliminar datos en el contenedor deque

2. Prototipo de función:

 两端插入操作: 
 push_back(elem);             在容器尾部添加一个数据
 push_front(elem);            在容器头部插入一个数据
 pop_back();                  删除容器最后一个数据
 pop_front();                 删除容器第一个数据

指定位置操作:
insert(pos,elem);             在pos位置插入一个elem元素的拷贝,返回新数据的位置
insert(pos,n,elem);           在pos位置插入n个elem数据,无返回值
insert(pos,beg,end);          在pos位置插入[beg,end)区间的数据,无返回值
clear();                      清空容器的所有数据
erase(beg,end);               删除[beg,end)区间的数据,返回下一个数据的位置
erase(pos);                   删除pos位置的数据,返回下一个数据的位置

3. Ejemplo de código específico:

#include<iostream>
using namespace std;
#include<deque>
//deque容器插入和删除

void printDeque(const deque<int>&d)
{
    
    
	for(deque<int>::const_iterator it=d.begin();it!=d.end();it++)
	{
    
    
	cout<<*it<<" ";
	}
	cout<<endl;
}


//两端操作
void test01()
{
    
    
deque<int>dl;

//尾插
dl.push_back(10);
dl.push_back(20);

//头插
dl.push_front(100);
dl.push_front(200);
printDeque(dl);

//尾删
dl.pop_back();
//200 100 10 
printDeque(dl);

//头删
dl.pop_front();
//100 10
printDeque(dl);

//insert插入
dl.insert(dl.begin(),1000);
dl.insert(dl.end(),1000);
printDeque(dl);

dl.insert(dl.begin(),2,10000);
//10000 10000 1000  100 10 1000 
printDeque(dl);

//按照区间进行插入
deque<int>d2;
d2.push_back(1);
d2.push_back(2);
d2.push_back(3);

dl.insert(dl.begin(),d2.begin(),d2.end());
//1,2,3,10000,10000,1000,100,10,1000 
printDeque(dl);
}

void test02()
{
    
    
	deque<int>dl;
	dl.push_back(10);
	dl.push_back(20);
	dl.push_back(100);
	dl.push_back(200);


	//删除
	deque<int>::iterator it = dl.begin();
	it++;
	dl.erase(it);
	//100 10 20
	printDeque(dl);

	//按区间的方式删除
	dl.erase(dl.begin(),dl.end());

	//清空
	dl.clear();
	printDeque(dl);
}


int main()
{
    
    
	//test01();
	test02();
	system("pause");
	return 0;
}

6, acceso a datos deque

1. Descripción de la función:
acceso a los datos en deque

2. Prototipo de función:

at(int idx);        返回索引idx所指的数据
operator[];         返回索引idx所指的数据
front();            返回容器中第一个数据
back();             返回容器中最后一个数据

3. Ejemplo de código específico:

#include<iostream>
using namespace std;
#include<deque>

//deque容器数据存取
void test01()
{
    
    
deque<int>d;
d.push_back(10);
d.push_back(20);
d.push_back(30);
d.push_front(100);
d.push_front(200);
d.push_front(300);

//通过[]方式访问元素
//300 200 100 10 20 30
int i;
for(i=0; i<d.size() ;i++);
{
    
    
	cout<<d[i]<<" ";
}
cout<<endl;

//通过at方式访问元素
for(i=0; i<d.size() ;i++)
{
    
    
	cout<<d.at(i)<<" ";
}
cout<<endl;


}

int main()
{
    
    

	test01();


system("pause");
return 0;
}

7, clasificación de contenedores deque

1. Descripción de la función:
use un algoritmo para ordenar el contenedor deque

2. Algoritmo:

sort(iterator beg,iterator end)   对beg和end区间内元素进行排序

3. Ejemplo de código específico:

#include<iostream>
using namespace std;
#include<deque>
#include<algorithm> //标准算法头文件

void printDeque(const deque<int>&d)
{
    
    
	for(deque<int>::const_iterator it =d.begin();it!=d.end();it++)
	{
    
    
	cout<<*it<<" ";
	}
	cout<<endl;
}

//deque容器排序
void test01()
{
    
    
deque<int>d;
d.push_back(10);
d.push_back(10);
d.push_back(10);
d.push_front(100);
d.push_front(200);
d.push_front(300);

//300 200 100 10 20 30
printDeque(d);

//排序 默认排序规则 从小到大 升序
//对于支持随机访问的迭代器的容器,都可以利用sort算法直接对其进行排序
//vector容器也可以利用 sort进行排序
sort(d.begin(),d.end());
cout<<"排序后:"<<endl;
printDeque(d);
}



int main()
{
    
    
	test01();

system("pause");
return 0;
}

para resumir

Lo anterior es el contenido relacionado con el contenedor deque, desde el concepto básico del contenedor deque, el constructor deque. Específico para operaciones de asignación de deque, operaciones de tamaño de deque, inserción y borrado de deque, acceso de datos de deque, clasificación de contenedor de deque y otras funciones específicas, deque tiene funciones muy prácticas.
Después de ordenarlo hoy, siento que entiendo más sobre el contenedor deque. Todavía tengo que pensar más, practicar más y seguir trabajando duro (ง • _ •) ง

Supongo que te gusta

Origin blog.csdn.net/qq_45252077/article/details/108884641
Recomendado
Clasificación