deque container learning (C++)

deque容器:
	·双端队列。可以对头端和尾部进行插入删除操作
deque与vector的区别:
	·vector对于头部插入删除效率低,数据量越大,效率越低
	·deque相对而言,对头部的插入删除速度比vector快
	·vector访问元素的速度会比deque快,这和两者的内部实现有关

deque内部工作原理:
	deque内部有个中控器,维护每段缓冲区中的内容,缓冲区中存放真实数据
	中控器维护的是每个缓冲区的地址,使得使用deque时像一片连续的内存空间

·deque容器的迭代器也是支持随机访问的

deque构造函数:
deque<T> deqT;					//采用模板实现类实现,默认构造函数
deque(deq.begin(), deq.end());	//将deq[begin(), end())区间中的元素拷贝给本身
deque(n, elem);					//构造函数将n个elem拷贝给本身
deque(const deque & deq);		//拷贝构造函数

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

deque和大小:			//deque是没有容量(capacity)的概念的 
empty();				//判断容器是否为空;
size();					//返回容器中的个数
resize(int num);		//重新指定容器的长度为num,若容器变长,则以默认值0填充新位置
						//如果容器变短,则末尾超出容器长度的元素被删除
resize(int num, elem);	//重新指定容器的长度为num,若容器变长,则以elem值填充新位置
						//如果容器变短,则末尾超出容器长度的元素被删除

deque插入和删除:			//pos的位置是迭代器,eg: deque.begin(),deque.end()
push_back(ele);				//尾部插入元素ele
push_front(ele);			//头部插入元素ele	
pop_back();					//删除最后一个元素
pop_front();				//删除第一个元素
insert(pos, ele);			//在pos位置插入一个ele元素的拷贝,返回新数据的位置 
insert(pos, n, ele);		//在pos位置插入n个ele数据,无返回值 
insert(pos, begin, end);	//在pos位置插入[begin,end)区间的数据,无返回值 
clear();					//删除容器中所有的元素
erase(begin, end)			//删除[begin,end)区间的数据,返回下一个数据的位置 
erase(pos);					// 删除pos未知的数据,返回下一个数据的位置 

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

deque排序
#include <algorithm> 
sort(iterator begin, iterator end)	//对begin到end区间内的元素进行排序
	//对于支持随机访问的迭代器的容器,都可以利用sort算法直接对其进行排序
#include <iostream>
using namespace std;
#include <deque>
#include <algorithm> 

void printDeque(const deque<int> & d)
{
    
    
	//const_iterator与iterator的区别,数据只读,不可修改 
	for (deque<int>::const_iterator it = d.begin(); it != d.end(); it ++){
    
    
		cout << *it << "\t";
	}
	cout << endl;
}

deque constructor:

void test01()
{
    
    
	deque<int> d1;
	for (int i = 0; i < 5; i ++){
    
    
		d1.push_back(i);
		d1.push_front(i);	
	}
	printDeque(d1);
	
	deque<int> d2(d1.begin(), d1.end());
	printDeque(d2);
	
	deque<int> d3(10, 100);
	printDeque(d3);
	
	deque<int> d4(d3);
	printDeque(d4);		
}

Vector assignment operation:

void test02()
{
    
    
	deque<int> d1;
	for (int i = 0; i < 5; i ++){
    
    
		d1.push_back(i);
		d1.push_front(i);	
	}
	printDeque(d1);
	
	//operator= 赋值
	deque<int> d2;
	d2 = d1;
	printDeque(d2);
	
	//assign赋值
	deque<int> d3;
	d3.assign(d1.begin(), d1.end());
	printDeque(d3);	
	
	deque<int> d4;
	d4.assign(10, 100);
	printDeque(d4);
}

deque and size :

void test03()
{
    
    
	deque<int> d1;
	for (int i = 0; i < 5; i ++){
    
    
		d1.push_back(i);
		d1.push_front(i);	
	}
	printDeque(d1);
	
	if (d1.empty()){
    
    
		cout << "d1为空" << endl; 
	}else{
    
    
		cout << "d1不为空" << endl;
		cout << "d1的大小为 :" << d1.size() <<endl; 
	}
	
	//重新指定容器大小
	//d1.resize(15);
	d1.resize(15, 3);
	printDeque(d1);
	
	d1.resize(5);
	printDeque(d1);
}

deque insertion and deletion:

void test04()
{
    
    
	deque<int> d1;
	for (int i = 0; i < 5; i ++){
    
    
		//尾插 
		d1.push_back(i);
		//头插 
		d1.push_front(i);	
	} 
	printDeque(d1);
	//尾删
	d1.pop_back();
	printDeque(d1);
	//头删 
	d1.pop_front();
	printDeque(d1);
	
	//insert
	d1.insert(d1.begin() + 3, 1000);
	printDeque(d1);
	d1.insert(d1.end() - 2, 2, 1000);
	printDeque(d1);
	deque<int> d2;
	d2.push_back(4);
	d2.push_back(5);
	d2.push_back(6);
	d1.insert(d1.begin(), d2.begin(), d2.end());
	printDeque(d1);
	
	//erase
	d1.erase(d1.begin() + 2);
	printDeque(d1);
	d1.erase(d1.begin(), d1.end() -3);
	printDeque(d1);
	d1.clear();
	printDeque(d1);	 
}

Deque data access and sorting:

void test05()
{
    
    
	deque<int> d1;
	for (int i = 0; i < 5; i ++){
    
     
		d1.push_back(i);
		d1.push_front(i + 10);	
	} 
	for (int i = 0; i < d1.size(); i ++){
    
    
		cout << d1[i] << "\t";
	}
	cout << endl;
	for (int i = 0; i < d1.size(); i ++){
    
    
		cout << d1.at(i) << "\t";
	}
	cout << endl;
	cout << "第一个元素为: " << d1.front() << endl;
	cout << "最后一个元素为: " << d1.back() << endl;
	
	//排序 默认 从小到大 升序
	//对于支持随机访问的迭代器的容器,都可以利用sort算法直接对其进行排序 
	sort(d1.begin(), d1.end());
	cout << "排序后:" <<endl;
	printDewue(d); 
}
int main()
{
    
    
	test01();
	test02();
	test03();
	test04();
	test05();
	system("pause");
	return 0;
 } 

*Dark horse programmer c++ course learning exercises

Guess you like

Origin blog.csdn.net/Fighting_gua_biu/article/details/113655151