C++标准库——顺序容器

容器是容纳特定类型对象的集合。顺序容器将单一类型元素聚集起来,并且根据位置来存储和访问这些元素。顺序容器中元素排列顺序与元素值无关,而是根据元素值添加到容器中的次序决定的。

标准库中有三种顺序容器,分别是vector,list与deque。其中vector支持随机的快速访问,因为vector中存放数据是在内存中连续存放的。在实际的实现中,vector会提前申请一块较大的内存空间(如果指定了大小,一般是指定大小的两倍),这样每次加入新的元素时不用再申请新的内存空间,提高效率。list容器是类似于链表的存储方式,因此插入元素效率较高,查找元素效率低,因为必须从头开始查找。deque是双端队列,也支持快速访问,同时在两端插入时有高效率。除了三种顺序容器以外,还有三种适配器,分别是stack,queue,priority_queue。适配器在基础的顺序容器基础上提供更高级的数据结构的行为,栈,队列,有优先级的队列。容器都是类模板,支持泛型编程,提供多种数据类型的支持。

容器有多种初始化的方式,包括初始化为另一个相同类型容器(容器类型与容器元素类型都需要相同)的副本,指定容器大小与内容的初始化,初始化为一段元素的副本等。其中初始化为一段元素的副本可以用另一个容器类型不同但是容器元素类型相容的容器来初始化。容器的元素类型有限制,必须可以赋值和复制。由于引用赋值与一般的赋值含义不同,因此引用不可以作为容器元素。IO对象不可以赋值和复制,也不可以作为容器对象。容器中都有迭代器,不同容器的迭代器可以支持的操作不同,一般迭代器都支持自增自减解引用判断是否相等(==和!=)等操作,vector与deque的迭代器支持加减n,迭代器相加减,比较等操作。迭代器一般是左闭合区间,表示左边的迭代器使用其指向的对象,右迭代器使用其前一个对象。容器中删除增加元素的操作都有可能导致迭代器失效,因此不要缓存(在一个变量中存放值)迭代器,具体失效与否与容器实现方式相关,迭代器实现与指针密切相关。

容器中定义了多个需要的类型,常用的有size_type,iterator,const_iterator等。此外容器提供了多种多样的操作,包括插入数据:push_back(),push_front(),insert()等。其中只用list和deque支持push_front()操作,vector不支持。Insert操作有多种调用方式。容器提供关系操作符的支持,但是具体的操作取决于容器元素类型。其他的删除,定义大小,赋值等操作都有支持。其中vector容器由于器特殊的实现,提供capacity和reserve函数,capacity返回容器可以存放的最大数据元素的个数,reserve可以指定可以存放的元素的个数。具体的容器选择可以根据应用的需求来确定,但是一般使用vector。因为其特殊的实现方式保证其高效率。string对象可以看做一个字符容器,支持顺序容器支持的很多操作,同时提供了很多自己独特的接口。

时间: 2024-10-10 10:04:25

C++标准库——顺序容器的相关文章

把《c++ primer》读薄(3-2 标准库vector容器+迭代器初探)

督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 标准库vector类型初探,同一种类型的对象的集合(类似数组),是一个类模版而不是数据类型,学名容器,负责管理 和 存储的元素 相关的内存,因为vetcor是类模版,对应多个不同类型,比如int,string,或者自己定义的数据类型等. 程序开头应如下声明 #include <iostream> #include <vector> #include <string> using std::strin

c++标准库之容器

array 对内置数组进行包装,捆绑常用操作之后就形成了array.array的优点是在时空间效率上与内置数组几乎一致,但比内置数组使用起来顺手.size函数代替 sizeof(arr)/sizeof(arr[0]),back函数代替了 arr[sizeof(arr)/sizeof(arr[0]-1],array还可以进行swap及比较.array的缺点是大小固定. vector 容器大小可动态增长,不能动态缩减的容器.vector支持下标访问,访问速度仅次于内置数组与array.vector在

C++ Primer 第四版读书笔记(八)之顺序容器

容器容纳特定类型对象的集合. 标准库vector类型,是一个顺序容器.它将单一类型元素聚集起来称为容器,然后根据位置来存储和访问这些元素,这就是顺序容器.顺序容器的元素排列次序与元素值无关,而是由元素添加到容器里的次序决定. 标准库定义了三种顺序容器类型:vector.list和deque.它们的差别在于访问元素的方式,以及添加或删除元素相关操作的运行代价.标准库还提供了三种容器适配器.实际上,适配器是根据原始的容器类型所提供的操作,通过定义新的操作接口,来适应基础的容器类型. 顺序容器类型 顺

《C++ Primer》第II部分:C++标准库

<C++ Primer>第II部分:C++标准库 前言 把<C++ Primer>读薄系列笔记.本篇为第II部分C++标准库,包含全书第8-12章重难点: IO库 顺序容器 范型算法 关联容器 动态内存 修订版课后题解见GitHub仓库cpp-primer-workbook. IO库 IO类继承机制:ifstream和istringstream继承自istream,ofstream和ostringstream都继承自ostream 宽字符IO类:在函数和类型前加前缀w,如wcin.

C++ primer笔记——第九章 顺序容器

顺序容器的元素按照其位置存储和访问.除了顺序容器之外,标准库还提供了几种关联容器,其元素按照键(key)排序.每组容器都提供一组不同的时间和功能的折中方案.顺序容器根据位置来存储和访问元素,元素的排列次序与元素值无关,而是由元素添加到容器的顺序决定.标准库定义了三种顺序容器:vector.list.dequeue.他们的差别在于元素访问的方式以及添加和删除元素相关操作的运行代价.标准库还提供了三种适配器.适配器是根据原始的容器类型所提供的操作,通过定义新的操作接口来适应基础的容器类型.顺序容器适

C++容器总结1——顺序容器和顺序容器适配器

容器 容器是容纳特定类型对象的集合,容器的类型分为顺序容器,容器适配器和关联容器,顺序容器将单一类型元素聚集起来成为容器,然后根据位置来存储和访问这些元素. 顺序容器的元素排列次序与元素值无关,而是由元素添加到容器里的次序决定.标准库定义了三种顺序容器类型:vector,list和deque.他们得差别在于访问元素的方式,以及添加或删除元素相关操作的运行代价. 适配器是根据原始容器类型所提供的操作,通过定义新的操作接口,来适应基础的容器类型.顺序容器适配器包括stack,queue和priori

把《c++ primer》读薄(3-3 标准库bitset类型)

督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. //开头 #include <bitset> using std::bitset; 问题1.标准库bitset类型(模版) 需要处理二进制位的时候,可以使用c++标准库提供的bitset类型,它也是类模版,类似vectro容器,唯一不同的是,bitset类型需要说明长度,使用常量表达式给出的整型字面值或者已经初始化的cosnt对象. bitset<32> bit;//从0到31位算的,bit的32位每位初始化为

C++标准库之顺序容器

通用概念. 顺序容器基本理解:按照顺序储存元素,并提供 元素具体操作(迭代器或其他) 和 顺序访问元素 的能力. 个人理解: 1)顺序:按照添加的先后次序排序.但,先进优先,还是后进优先取决于具体容器. 个人应用: 1)在可以使用容器时,尽量使用容器.因为你无法保证自己的算法优于整个开发组. 2)选择容器的基本原则(from C+ primer): 1,在不知道如何选择时,使用vector. 2,单个元素需求内存很小,内存紧缺时,不要使用list/forward_list. 3,已知添加操作时,

C++ Primer(一)_标准库_顺序容器

目录 顺序容器 顺序容器 选择什么容器根据业务需求, 研读STL剖析了解底层数据结构, 更加清楚各种优势劣势 零碎点 迭代器被设置为左闭右合带来的编程假设 begin == end,范围为空 begin != end, 至少一个元素 begin可递增至end 两大类型的容器初始化--同类型容器拷贝,迭代器范围拷贝 前者要求容器类型一致 后者只要求元素可转换 两大类型的容器赋值--=号赋值,assign赋值 前者用于列表或同类型容器 后者用于迭代器,初始化列表,(n,elem)方式:限制顺序容器