文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

一文快速掌握C++双端数组容器deque的使用

2024-04-02 19:55

关注

deque容器的概念模型

是双端数组,可以对头部进行插入删除操作

示意图

值得注意的是deque容器比vector容器多了头插、头删的操作以及front()和back(),后面这两个分别代表容器的第一个元素和最后一个元素,并不是迭代器,调用他们会得到具体的值。

deque与vector的区别:

deque的内部工作原理:

1.deque内部有个中控器,维护每段缓冲区中的内容,缓冲区中存放真实数据。

2.中控器维护的是每个缓冲区的地址,使得使用deque时像一片连续的内存空间

3.deque的迭代器也是支持随机访问的

4.图示:

deque进行插入的时候是在结点对应的缓冲区操作的,缓冲区不有位置的时候直接插入到缓冲区中,缓冲区满的话就开辟新节点,再进行插入,所以才说像是连续的存储空间。

deque容器的基本操作

包括构造方法、赋值、计算大小、插入删除等

构造函数

deque容器的构造

函数原型

代码示例:

//打印
void printDeque(const deque<int>& d)//只读容器不可改
{//迭代器变为 const_iterator
    for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++)
    {
        cout << *it << " ";
    }
    cout << endl;
}
void testa()
{
    //构造:
    //第一种
    deque<int>d1;
    for (int i = 0; i < 10; i++)
    {
        //d1.push_back(i); 头插尾插都可以
        d1.push_front(i);
    }
    //第二种
    deque<int>d2(d1.begin(), d1.end());
    //第三种
    deque<int>d3(d2);
    //第四种
    deque<int>d4(6, 100);
    //测试输出
    printDeque(d1);
    printDeque(d2);
    printDeque(d3);
    printDeque(d4);
    //排序
    cout << "排序" << endl;
    sort(d1.begin(), d1.end());
    printDeque(d1);
}

tips:如果将打印语句设为只读,那么迭代器类型也要变为:const_iterator。

赋值操作

给deque容器赋值

函数原型:

代码示例:

void testb()
{
    //赋值:
    deque<int>d1;
    for (int i = 0; i < 10; i++)
    {
        d1.push_back(i);
    }
    //第一种
    deque<int>d2 = d1;
    //第二种
    deque<int>d3;
    d3.assign(d1.begin(), d1.end());
    //第三种
    deque<int>d4;
    d4.assign(6, 88);
    //测试:
    printDeque(d2);
    printDeque(d3);
    printDeque(d4);
}

容器大小

对deque的大小进行操作

deque.empty();判断容器是否为空

deque.size();返回容器中元素的个数

deque.resize(m);重新指定容器长度为num,容器变长以默认值填充,容器变短则超出部分删除

deque.resize(m,elem);同上,区别是默认值填充变为elem值填充

代码示例:

void testc()
{
	//大小的操作:
	//size:
	deque<int>d;
	if (d.empty())
	{
		cout << "此时容器为空" << endl;
		cout << "打印容器的大小:" << d.size() << endl;
	}
	for (int i = 0; i < 7; i++)
	{
		d.push_back(i);
	}
	cout << "打印容器的大小:" << d.size() << endl;
	printDeque(d);

	//resize
	d.resize(10,100);
	cout << "打印容器的大小:" << d.size() << endl;
	printDeque(d);
	d.resize(5);
	cout << "打印容器的大小:" << d.size() << endl;
	printDeque(d);
}

tips:

插入和删除

向deque容器中插入和删除数据

函数原型:

两端操作:

指定位置:

代码示例:

//两端操作
void test01()
{
	deque<int>d1;
	//尾插
	d1.push_back(10);
	d1.push_back(20);

	//头插
	d1.push_front(100);
	d1.push_front(200);

	PrintDeque(d1);
	//尾删
	d1.pop_back();
	PrintDeque(d1);

	//头删
	d1.pop_front();
	PrintDeque(d1);
}
void test02()
{
	deque<int>d2;
	//尾插
	d2.push_back(10);
	d2.push_back(20);

	//头插
	d2.push_front(100);
	d2.push_front(200);

	PrintDeque(d2);

	//insert插入
	d2.insert(d2.begin(), 1000);
	PrintDeque(d2);

	d2.insert(d2.begin(), 2,10000);
	PrintDeque(d2);

	//按照区间进行插入
	deque<int>d3;
	d3.push_back(1);
	d3.push_back(2);
	d3.push_back(3);
	d2.insert(d2.begin(), d3.begin(), d3.end());
	PrintDeque(d2);
}

void test03()
{
	deque<int>d4;
	//尾插
	d4.push_back(10);
	d4.push_back(20);
	//头插
	d4.push_front(100);
	d4.push_front(200);
	PrintDeque(d4);
	//删除
	deque<int>::iterator it = d4.begin();
	it++;
	d4.erase(it);
	PrintDeque(d4);
	//按照区间方式删除
	d4.erase(d4.begin(), d4.end());
	PrintDeque(d4);
	//清空
	d4.clear();
	PrintDeque(d4);
}

数据存取

对deque中的元素进行存取操作

函数原型:

代码示例:

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

排序

需要引入头文件:<algorithm>

利用算法实现对deque容器的排序

算法:sort(iterator beg,iterator en); 对beg和en的区间升序排序

tips:对于支持随机访问的迭代器都可以用sort进行排序

到此这篇关于一文快速掌握C++双端数组容器deque的使用的文章就介绍到这了,更多相关C++双端数组容器deque内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯