C++标准库之顺序容器

通用概念。

  顺序容器基本理解:按照顺序储存元素,并提供 元素具体操作(迭代器或其他) 和 顺序访问元素 的能力。

  个人理解:

    1)顺序:按照添加的先后次序排序。但,先进优先,还是后进优先取决于具体容器。

  个人应用:

    1)在可以使用容器时,尽量使用容器。因为你无法保证自己的算法优于整个开发组。

    2)选择容器的基本原则(from C+ primer):

      1,在不知道如何选择时,使用vector。

      2,单个元素需求内存很小,内存紧缺时,不要使用list/forward_list。

      3,已知添加操作时,尽量使用符合 原设计思想 的容器。例如:频繁的随机插入/删除,使用list/forward_list,而尽量不使用vector,deque。

      4,举一反三:混合添加操作时,选择最频繁的添加操作,作为选择容器的标准。例如:100次后置添加 + 一次随机操作时,选择vector,deque。反之:list/forward_list。

      5,举一反三:添加操作在某些阶段存在统一,则可以进行容器替换。例如:输入元素使用 list。输入结束后,使用vector储存(copy list),再进行读取操作。

    3)尽量使用迭代器来操作容器——虽然有些容器支持下标。、

  一些细节:

    1)容器可以保存容器(嵌套)。

vector容器:

  一些细节:

    1)使用连续内存保存元素。

    2)可以下标访问元素(速度快)。可是当作动态数组使用。

    3)中间添加/删除元素耗时。因,需要重新调整内存。同时会导致迭代器失效(大概率)。

    4)添加新元素时(push_back),也可能重新分配内存。导致迭代器失效(中概率)。

    5)容器存在增长方式:超出时,按照一定量增加内存,以保证添加数个元素后,才需要再次分配内存。量值可通过函数设定(不建议)。

deque容器:

  一些细节:

    1)使用连续内存保存元素。

    2)不确定是否可以使用下标访问。

list容器:

  一些细节:

    1)使用链表的思想。

    2)额外内存开销相对较大。

    3)不支持下标。

forward_list容器:

  一些细节:

    1)和list容器类似。

    2)主要特征:单向链表。

array容器:

  一些细节:

    1)对数组的封装。加强安全性。

    2)有数组的特性。

string容器:

  一些细节:

    1)使用连续内存保存元素。

    2)用来保存字符串。

适配器:

  概念:一个适配器是一种机制。通过适配器,可以使容器从行为上模仿其他数据结构。

  顺序容器可用适配器:stack, queue, priority_queue。

  个人理解:

    1)用来模拟一些通用的数据结构。如上:堆栈,队列。

  疑惑:

    1)为何不直接做成容器?

时间: 2024-10-27 07:19:35

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

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

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

C++primer笔记:IO库、顺序容器、关联容器、面向对象、泛型算法、模板和泛型编程

第八章:IO库不直接来处理输入输出,而是通过在标准库中的一些类型来处理io istream ostream cin cout cerr getline函数 iostream:定义了用于基本读写流的基本类型 fstream: 定义了基本的读写命名文件的类型 sstream:定义了读写内存的string对象的类型 IO对象无拷贝或者赋值 条件状态:IO定义了一些函数和标志,可以帮助我们访问和操作流得条件状态 strm::iostate 条件状态的完整功能 strm::badbit 流已崩溃 strm

c++ 标准库的各种容器(vector,deque,map,set,unordered_map,unordered_set,list)的性能考虑

转自:http://blog.csdn.net/truexf/article/details/17303263 一.vector vector采用一段连续的内存来存储其元素,向vector添加元素的时候,如果容量不足,vector便会重新malloc一段更大的内存,然后把原内存中的数据memcpy到新的内存中,并free原内存块,然后将新元素加入.vector的元素插入性能跟以下几个要素关系重大: 1. 插入的位置 头部插入:将所有元素后移,然后将新元素插入 中间插入:将插入点后面的元素后移,然

《深入实践C++模板编程》之六——标准库中的容器

1.容器的基本要求 a.并非所有的数据都可以放进容器当中.各种容器模板对所存数据类型都有一个基本要求——可复制构造.将数据放进容器的过程就是通过数据的复制构造函数在容器内创建数据的一个副本的过程. b.容器中必须有若干与所存数据类型有关的嵌套定义类型. C::value_type 容器所存数据类型 C::reference 容器数据的引用类型 C::const_reference 容器数据的只读引用类型 C::size_type 容器容量类型,通常是一个无符号整数类型 c.除嵌套类型定义外,容器

【C++标准库】STL容器

STL容器的共通能力 所有容器提供的都是"value语义"而非"reference语义".容器进行元素的安插动作时,内部进行copy或者move,而不是管理元素的reference. 元素在容器内有其特定顺序. 一般,各项操作并非绝对安全,调用者需要确保传给操作函数的实参符合条件. const vector<int> v1 = { 1,2,3,4,5,6 }; //使用初值列初始化 vector<float> v2(v1.begin(), v

【C++标准库】特殊容器

特殊容器,又称为容器适配器(Container Adapter),它们改造了标准STL容器,使之满足特殊的要求. Stack堆栈 使用stack时,需包含头文件<stack> push() 将一个元素压入栈内 pop() 从栈内移除下一个元素,但是并不返回它 top()         返回栈内下一个元素,但并不移除它. 如果stack内没有元素,top()和pop()会导致不明确的行为,可采用size()或empty()来检查容器是否为空. Queue队列 Queue实现出了一个FIFO先进

C++标准库之关联容器

基本常识: 1)主要为:map 和 set.衍生型:multi和unorder.例如:multimap, unorder_multimap. 2)使用pair作为单位元素. 1,key-value组成一个pair. 2,first成员:key.second成员:value. 3,key为const类型不可改变. 3)关联容器的构成:key-pair. 基本要点: 1)通常不对关联容器使用 泛型算法. 2)有序关联容器,有 严格弱序 的要求.默认使用 [<=].当然,也可以使用谓词或lambda表

C++教程 扩展标准库第一部分

今天给大家带来的是C++扩展标准库的一些知识点的讲解!这是一部分,后面还会更新另外的一部分! ok,今天我们说另一个小工具,这个工具在处理一些复杂数据的时候会有一些意想不到的效果,不过这得和大家说一些,我是一个标准的标准库忠实者,所以我写程序基本都会优先考虑库,然后在世boost库,而接下来的东西我会借助标准库的东西进行扩展的. 既然是标准库的扩展,那么第一步我们可以先将标准库的东西再进行一些简化,当然这些简化只是为了我们在调试程序的时候方便使用一些. C++的标准输出输入流为了简便都提供了一个

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

容器是容纳特定类型对象的集合.顺序容器将单一类型元素聚集起来,并且根据位置来存储和访问这些元素.顺序容器中元素排列顺序与元素值无关,而是根据元素值添加到容器中的次序决定的. 标准库中有三种顺序容器,分别是vector,list与deque.其中vector支持随机的快速访问,因为vector中存放数据是在内存中连续存放的.在实际的实现中,vector会提前申请一块较大的内存空间(如果指定了大小,一般是指定大小的两倍),这样每次加入新的元素时不用再申请新的内存空间,提高效率.list容器是类似于链