欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C++ STLdeque基本概念

程序员文章站 2024-02-11 23:33:10
...
  • vector和deque区别:
    vector对于头部的插入和删除效率低,数据量越大,效率越低
    deque相对而言对于头部的插入和删除速度比vector快(deque支持头部和尾部的删除和插入操作)
    vector访问元素的速度会比deque快,这和两者内部实现有关

C++ STLdeque基本概念

  • deque内部工作原理:
    deque内部有个中控器,维护每段缓冲器中的内容,缓冲器存放真实数据
    中控器维护的是每个缓冲区的地址,使得使用deque时像一片连续的内存空间
    对头部数据和尾部数据的插入和删除比较快,但访问元素时,需要找到指针指向对应的缓存区,比较慢
    C++ STLdeque基本概念

  • deque构造函数
    1.deque deq //默认构造函数
    2.deque(beg,end) //构造函数将(beg,end)区间中的元素拷贝给本身
    3.deque(n, elem) //构造函数将n个elem拷贝给本身
    4.deque(const deque &deq) //拷贝构造函数

  • deque赋值操作
    1.deque& operator=(const deque&deq) //重载赋值操作运算符
    2.assign(beg, end) //将beg到end之间数据拷贝给本身
    3.assign(n, elem) //将n个elem赋值给本身

  • deque大小操作
    deque.empty() //判断容器是否为空
    deque.size() //返回容器中元素个数(deque没有容量大小之说)
    deque.resize(num) //重写指定容器长度为num,若容器变长则以默认值填充新位置
    //如果容器变短,则末尾超出容器长度的元素被删除
    deque.resize(num,elem)//重写指定容器长度为num,若容器变长则以elem值填充新位置
    //如果容器变短,则末尾超出容器长度的元素被删

  • 两端插入操作
    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位置的数据,返回下一个数据的位置

#include <iostream>
#include <string>
#include <deque>

using namespace std;

//传入常引用,则对应的迭代器也是常迭代器
void printdeque(const deque<int> &deq)
{
	for (deque<int>::const_iterator it=deq.begin(); it!=deq.end(); it++)
	{
		cout<<*it<<" ";
	}
	cout<<endl;

}
//构造函数的使用
void test1()
{

	deque<int> deq;
	for (int i = 0; i<10; i++)
	{
		//deq.push_back(i);		//尾插入0 1 2 3 4 5 6 7 8 9
		deq.push_front(i);		//头插入9 8 7 6 5 4 3 2 1 0
	}

	printdeque(deq);

	deque<int> deq1(deq.begin(), deq.end());
	printdeque(deq1);

	deque<int> deq2(10, 0);
	printdeque(deq2);

	deque<int> deq3(deq2);
	printdeque(deq3);

}

//赋值操作函数
void test2()
{
	deque<int> deq;
	for (int i = 0; i<10; i++)
	{
		deq.push_back(i);
	}
	
	printdeque(deq);
	deque<int> deq1=deq;
	printdeque(deq1);

	deque<int> deq2;
	deq2.assign(deq.begin(), deq.end());
	printdeque(deq2);


	deque<int> deq3;
	deq3.assign(10, 0);
	printdeque(deq3);
}

//deque大小操作
void test3()
{
	deque<int> deq;
	for (int i = 0; i<10; i++)
	{
		deq.push_back(i);
	}
	if (deq.empty())
	{
		cout<<"deq为空"<<endl;
	}
	else
	{
		cout<<"deq不为空"<<endl;
		cout<<"大小:"<<deq.size()<<endl;
	}
	//扩充元素个数
	deq.resize(15);
	printdeque(deq);
	cout<<"大小:"<<deq.size()<<endl;

	//缩短元素个数
	deq.resize(5);
	printdeque(deq);
	cout<<"大小:"<<deq.size()<<endl;

	//赋值指定值进行扩充
	deq.resize(10, 2);
	printdeque(deq);
	cout<<"大小:"<<deq.size()<<endl;

}
int main()
{
	//test1();
	//test2();
	test3();
	return 0;
}

相关标签: STL C++ deque