• 19.03 容器的说明和简单应用例续


    一:deque和stack:顺序容器

    <1>deque:双端队列 double-enden queue(双向开口)。相当于动态数组,头部和尾部插入与删除数据都很快。

    #include <deque>
    #include <iostream>
    
    using namespace std;
    
    class A
    {
    public:
    	A(int tmpv) :m_i(tmpv)  //构造函数
    	{
    		cout << "A::A()构造函数执行" << endl;
    	}
    	A(const A& tmpA) :m_i(tmpA.m_i)
    	{
    		cout << "A::A()的拷贝构造函数执行" << endl;
    	}
    
    	~A()
    	{
    		cout << "A::~A()的析构函数执行" << endl;
    	}
    public:
    	int m_i;
    };
    
    void func()
    {
    	deque<A>mydeque;
    	for (int i = 0; i < 5; i++)
    	{
    		cout << "----------begin1------------" << endl;
    		mydeque.push_front(A(i));
    		cout << "----------end1--------------" << endl;
    
    	}
    	for (int i = 0; i < 5; i++)
    	{
    		cout << "----------begin2------------" << endl;
    		mydeque.push_back(A(i));
    		cout << "----------end2--------------" << endl;
    
    	}
    
    	for (int i = 0; i < mydeque.size(); i++)
    	{
    		cout << "下标为i = " << i << " 的值为 " << mydeque[i].m_i << endl;
    		//输出地址
    		printf("每个元素的地址为: %p\n", &mydeque[i]);
    	}
    }
    
    int main()
    {
    	func();
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56

    总结:内部是使用分段数组的方式存储,分段连续内存。

    <2>stack(堆栈/栈):后进先出,只有一个开口,只要把deque左边开口封死,我们就可以认为变成了一个stack。

    和vector的区别:vector支持从中间插入中间删除,虽然效率不算高。
    stack只支持从栈顶放入元素以及从栈顶取出(删除)元素。这种特性是stack容器设计初衷。
    deque实际上是包含着stack功能。

    二:queue

    queue:队列。这是个普通队列:先进先出,比较基本的数据结构;
    deque也包含这queue功能。

    三:list

    双向链表,不需要各个元素之间的内存连在一起;查找效率不突出,在任意位置插入和删除元素非常迅速。
    面试中,vector和list区别:
    <1>vector类似于数组,它的内存空间是连续的;list双向链表,内存空间并不连续(至少不要求内存空间是连续的)。
    <2>vector从中间或者开头插入元素效率比较低,但是list插入元素效率非常高。
    <3>vector当内存不够时,会重新找一块内存,对原来内存对象做析构,在新找的内存中重新构建对象。
    <4>vector能够高效的随机存取,而list做不到这一点,比如要访问第五个元素。vector内存连续,一下就能定位到第五个元素。list找到第五个元素,要沿着一个链一直找下去,直到找到第五个元素,所以vector随机存取比较快,而list随机存取比较慢。

    四:其他

  • 相关阅读:
    Jira使用教程-不古出品
    openmp 通用核心 学习 2 数据环境—任务-内存模型
    SSM项目 - Online Music Player(在线音乐播放器)- 前端页面设计 - 细节狂魔
    JavaScript 条件判断语句以及示例和详细代码解释为什么这样写(1)
    MFC Windows 程序设计[197]之数据表格(附源码)
    双重差分模型(DID)论文写作指南与操作手册
    spring boot实现短信验证码功能
    PHP基础语法(上)
    SpringBoot集成Quartz实现定时任务
    白水三佳电脑ERP部署
  • 原文地址:https://blog.csdn.net/zzyzxb/article/details/125511477