vector和list

一、vector

<1>定义:vector是表示可以更改大小的数组的序列容器。

        就像数组一样,vector使用相邻的存储位置来存储元素,也就是说,它们的元素也可以使用“偏移量”来访问它的元素,就像数组一样有效。但与数组不同的是,它们的大小可以动态变化,其存储由容器自动处理。
        在内部,vector使用一个动态分配的数组来存储它们的元素。当插入新元素时,这个数组可能需要重新分配,以增加大小,这意味着分配一个新数组并将所有元素移动到它。在处理时间方面,这是一个相对昂贵的任务,因此,vector在每次添加到容器中的元素时都不会重新分配

        相反,矢量容器可能会分配一些额外的存储,以适应可能的增长,因此容器可能具有比严格需要的存储容量更大的容量(即:它的大小)。库可以实现增长不同的策略来平衡内存使用和重新分配,但在任何情况下,重新分配应该只发生在对数生长间隔的大小,以便插入单个元素的vector可以提供平摊常数时间复杂度(见push_back方法)。
        因此,与数组相比,vector消耗更多的内存,以换取管理存储和动态增长的能力。与其他动态序列容器(deques、list和转发列表)相比,矢量非常高效地访问其元素(就像数组一样),并且相对高效地添加或删除元素。对于在其他位置插入或删除元素的操作,它们的性能比其他的要差,而且迭代器和引用的一致性要低于列表和代理列表。

<2>vector的迭代器


<3>vector的修饰符


二、list

<1>定义:列表是一个序列容器,它允许在序列中任何地方的固定时间插入和删除操作,并在两个方向上进行迭代。
        列表容器被实现为doubly链表;双向链表可以存储它们在不同的和不相关的存储位置所包含的每一个元素。该顺序由关联的每个元素与前面的元素的链接和跟随它的元素的链接保持在内部。
        它们与转发列表非常类似:主要区别在于,转发列表对象是单链表,因此只能迭代转发,以换取更小和更高效。与其他基本标准序列容器(array、vector和deque)相比,列表在插入、提取和移动容器内的任何位置上,在迭代器已经获得的位置上执行得比较好,因此也可以使用这些算法,比如排序算法。

        与这些其他顺序容器相比,列表和转发列表的主要缺点是它们没有通过它们的位置直接访问这些元素;例如,要访问列表中的第6个元素,必须从已知的位置(比如开始或结束)迭代到该位置,在这些位置之间的距离中需要线性时间。它们还消耗一些额外的内存,以保持与每个元素相关联的链接信息(这可能是大列表小元素的一个重要因素)。

<2>list的迭代器


<3>list的修饰符


        在这里先简单了解vector和list,下一篇尝试实现一下插入删除等等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值