Chapter9(顺序容器) --C++Prime笔记】的更多相关文章

PS:删除元素的成员函数并不检查其参数.在删除元素之前,程序员必须确保它们是存在的. 1.迭代器的范围是[begin,end)左闭右开. 2.对构成迭代器的要求: ①它们指向同一个容器中的元素或者容器的最后一个元素之后的位置. ②end不在begin之前. 3.当将一个容器初始化为另一个容器的拷贝的时候,两个容器的容器类型和元素类型都必须相同.但是,当传递迭代器参数来拷贝一个范围的时候,新容器和原容器中的元素类型也可以不同,只要能将要拷贝的元素转换为要初始化的容器的元素类型就可以了. 4.为了使…
1.关联容器: map关键字-值对,经常被称为关联数组 set中每个元素只有一个关键字,即只保存关键字的容器 ①允许重复的关键字的容器名字都包含multi. ②不保持关键字顺序存储的容器的名字都以但粗unordered开头. ③无序容器以哈希函数来组织元素. ④关联容器的迭代器都是双向的. map   set    multimap    multiset    / 无序集合   unordered_map  unordered_set     unordered_multimap    uno…
一个容器是特定类型对象的集合 顺序容器中元素的顺序与其加入容器的位置对应 关联容器中元素的顺序由其关联的关键字决定,关联容器分为有序关联容器和无序关联容器 所有容器类共享公有接口,不同容器按不同方式扩展. 标准库还提供了3种容器适配器,为容器操作定义了不同的接口 9.1 顺序容器概述 所有容器都可快速访问元素,但在不同方面有折中: 添加/删除元素的代价 非顺序访问的代价 顺序容器的类型 vector 可变数组大小.支持快速随机访问.在尾部之外的位置插入或删除元素可能很慢. deque 双端队列.…
第9章 顺序容器 引: 顺序容器: vector 支持快速随机访问 list 支持快速插入/删除 deque 双端队列 顺序容器适配器: stack 后进先出栈 queue 先进先出队列 priority_queue 有优先级管理的队列 1. 容器元素的初始化 C<T> c; //empty C c(c2); //副本 C c(b, e); //迭代器 C c(n, t); //n个相同元素 // 以下只适用于顺序容器 C c(n); 2. 容器内元素的类型约束 (1)元素必须支持赋值运算 (…
1.标准库中定义了一些顺序容器,所有顺序容器都提供了快速顺序访问元素的能力. 2.如果容器的元素类型没有默认构造函数,那么在构造这个容器的时候不能只指定这个容器的数目,因为没有办法默认构造这些元素. 3.常见的一些容器操作 4.当一个容器初始化另一个容器拷贝时,两个容器的元素类型必须完全匹配,如果用一个容器的迭代器去初始化另一个容器时,只要元素类型可以转换即可. 5.当定义一个array时除了指定类型之外还要定义它的大小,array可以进行拷贝赋值. std::array<> arr = {,…
顺序容器类型 类型 解释 vector 可变大小数组.支持快速随机访问.在尾部之外的位置插入或删除元素可能很慢 deque 双端队列.支持快速随机访问.在头尾位置插入.删除速度很快 list 双向链表.只支持双向顺序访问.在list中任何位置进行插入.删除操作速度都很快 forward_list 单向链表.只支持单向顺序访问.在链表任何位置进行插入.删除操作速度都很快 array 固定大小数组.支持快速随机访问.不能添加或删除元素 string 与vector相似的容器,但专门用于保存字符.随机…
<C++ Primer 4th>读书笔记 顺序容器内的元素按其位置存储和访问.容器类共享公共的接口,每种容器类型提供一组不同的时间和功能折衷方案.通常不需要修改代码,只需改变类型声明,用一种容器类型替代另一种容器类型,就可以优化程序的性能. 标准库定义了三种顺序容器类型:vector.list 和 deque(是双端队列“double-ended queue”的简写,发音为“deck”).它们的差别在于访问元素的方式,以及添加或删除元素相关操作的运行代价.标准库还提供了三种容器适配器(adap…
list 双向链表,可以双向遍历,既指向前驱节点,又指向后继但不能随机访问任意元素,可动态增加或者减少元素,内存管理自动完成,增加任何元素都不会使迭代器失效, 删除元素时,除了指向当前被删元素的迭代器外,其他迭代器都不会失效 iterator指向当前被删除元素的下一个. deque vector是单向开口的连续空间,deque是双向开口的连续线性空间 双向开口则意味着可以在头尾两端分别插入或者删除元素 关联容器和顺序容器的区别在于:关联容器通过key存储读取元素,而顺序容器则是通过元素在容器中的…
0.前言 本文简单地总结了STL的顺序容器的知识点.文中并不涉及具体的实现技巧,对于细节的东西也没有提及.一来不同的标准库有着不同的实现,二来关于具体实现<STL源码剖析>已经展示得全面细致.所以本文仅仅是对容器基础知识的归纳.至于容器提供的接口与使用实例,建议查取官方文档.文章难免有错漏,希望指出. 1.容器概论 容器,置物之所也.像桶可装水,碗可盛汤,C++的容器,可以存储对象.容器有多种,用来处理不同的元素操作诉求.按照元素存储到容器中以及访问方式的差异,容器分为顺序容器与关联容器.顺序…
所谓容器,就是一个装东西的盒子,在c++中,我们把装的东西叫做“元素” 而顺序容器,就是说这些东西是有顺序的,你装进去是什么顺序,它们在里面就是什么顺序. c++中的顺序容器一共有这么几种: vector 可变大小数组 deque 双端队列 list 双向链表 forward_list 单向链表 array 固定数组大小 string 与vector相似的容器,但专门用于保存字符 这些容器可以让我们方便地放元素,取元素,but,她们在:添加.删除.非顺序访问,这些方面的性能都是不同滴(根据需要适…
由于书籍上写的已经很经典了,故大部分用图片的形式来阐述概念,代码纯手打进行验证. 1.顺序容器类型:vector.deque.list.forword_list.array.string. 2.顺序容器概述: 3.小结 4. 验证代码如下: #include <iostream> #include <vector> #include <array> #include <string> #include <list> using namespace…
—顺序容器:vector,list,queue1.顺序容器的常见用法: #include <vector> #include <list> #include <queue> (1)vector声明 vector<string> svec;(2)添加元素: c.push_back(t): 在容器 c 的尾部添加值为 t 的元素.返回 void 类型  c.push_front(t):在容器 c 的前端添加值为 t 的元素.返回 void 类型 只适用于 lis…
顺序容器的添加.访问.删除操作以及forward_list的特殊操作,还有迭代器失效问题. 一.向容器添加元素 // array不支持这些操作 // forward_list有自己撰于的版本的insert和emplace // forward_list不支持push_back和emplace_back // vector和string不支持push_front和emplace_front c.push_back(t); 在c的尾部创建一个值为t或由arg创建的元素 c.emplace_back(…
顺序容器属于C++ STL的一部分,也是非常重要的一部分. 顺序容器包括: std::vector,包含在头文件<vector>中 std::string, 包含在头文件<string>中 std::deque,包含在头文件<deque>中 std::list,包含在头文件<list>中 std::forward_list,包含在头文件<forward_list>中 std::array, 包含在头文件<array>中 顺序容器几乎可…
1.顺序容器:vector,deque,list 容器类共享公共接口,只要学会其中一种类型就能运用另一种类型.每种容器提供一组不同的时间和功能这种方案,通常不需要修改代码,秩序改变类型声明,每一种容器类型替代另一种容器类型,就可以优化程序的性能.容器值定义了少量操作,大多数额外的操作有算法库提供. 2.为了使用顺序容器,要包含头文件: #include<vector> #include<list> #include<deque> 3.所有容器都是类模板,要定义某种容器要…
 参考:http://www.cnblogs.com/kurtwang/archive/2010/08/19/1802912.html 1..顺序容器:vector(快速随机访问):list(快速插入删除):deque(双端队列) 2.顺序容器适配器:stack 后进后出,栈:queue 后进先出,队列:priority_queue 优先队列 3. 初始化:    a.  C<T> c: 创建名为c的空容器,适用于所有容器    b.  C c(c2): 创建容器c2的副本,要求c与c2有相同…
练习9.1:对于下面的程序任务,vector.deque和list哪种容器最为适合?解释你的选择的理由.如果没有哪一种容器优于其他容器,也请解释理由.(a) 读取固定数量的单词,将它们按字典序插入到容器中.我们将在下一章中看到,关联容器更适合这个问题.(b) 读取未知数量的单词,总是将单词插入到末尾.删除操作在头部进行.(c) 从一个文件读取未知数量的整数.将这些数排序,然后将它们打印到标准输出.(a)应该使用array,因为单词的数量是固定的,也就是说元素的个数是固定的,因此符合array的特…
一.顺序容器的分类 顺序容器:vector向量.list链表.deque双端队列: 优先级最高的是vector向量,它的速度比较快,优点最多: 在程序设计中,容器可以切换: #include <iostream> #include <vector> #include <list> #include <deque> using namespace std; int main() { vector<int> Ivec; list<int>…
顺序容器: vector:数组 list:链表 deque:双端数组 顺序容器适配器: stack:堆栈 queue:队列 priority_queue:优先级队列 deque是一个动态数组 deque与vector非常类似: deque可以在在数组开头和末尾插入和删除数据: #include <deque> #include <algorithm> deque<int>::iterator iElemetnLocater; for(iElementLocater a.…
C++ STL 提供了3个顺序容器 :vector, deque, list Vector动态数组.支持高速訪问:list双向链表,支持高速插入和删除. vector 中的元素是顺序存放的.所以随机訪问非常快,可是要插入和删除,这个时间复杂度就非常高了,vector初始化时有一个capacity,假设元素个数超出capacity,那vector就会又一次分配一个新的空间.并把旧值拷贝到新的空间中,释法原空间,这个也要耗费非常多时间,所以假设你知道元素的最大值,最好用reserve()函数初始最大…
我们都知道,stl在集装箱船分为两类,订购集装箱和相关的容器. 顺序容器有三种即动态数组vector,双端队列deque,以及链表list (对csdn的文字排版严重吐槽.写好的版发表了就变了) 一:顺序容器的经常使用操作 1:首先顺序容器的迭代器 定义:T<C>::iterator iter; /*支持全部顺序容器*/ *iter //返回迭代器的引用 iter->mem //对iter解引用,等效于(*iter).men ++iter|iter++ //自加 --iter|iter-…
#include <iostream> #include <algorithm> #include <vector> #include <string> #include <list> using namespace std; //顺序容器的insert使用方法 //顺序容器:vector,deque,list,forward_list,array,string //----------------------------------------…
在C++标准库中定义了三种顺序容器类型:vector,list和deque.所谓顺序容器就是根据位置来存储和访问元素,元素的排列次序与元素的值无关,而是由元素添加到容器的次序决定的. vector的底层存放空间是像数组一样连续的空间,但vector容器是可以自增长的,当vector插入元素时,使其所需空间超过最初分配的空间时,vector就会再找一个更大的连续的空间存放之前的旧元素和新添加的元素,然后释放之前的空间.而如果是这样的增长机制,势必会影响vector插入新元素的性能.因为如果有连续的…
容器是一种容纳特定类型对象的集合.C++的容器可以分为两类:顺序容器和关联容器.顺序容器的元素排列和元素值大小无关,而是由元素添加到容器中的次序决定的.标准库定义了三种顺序容器的类型:vector.list和deque(双端队列).此外,标准库还提供了三种容器适配器:stack.queue和prioroty_queue类型.适配器是根据原始的容器类型所提供的操作,通过定义新的操作接口,来适应基础的容器类型.见下表 顺序容器 vector 支持快速随机访问 list 支持快速插入/删除 deque…
1.顺序容器的元素排列次序与元素的值无关,而是由元素添加到容器里的次序决定. 2. 顺序容器 vector                               支持快速随机访问 list                                    支持快速插入/删除 deque                              双端队列 顺序容器适配器 stack                                        后进先出(栈) queue…
  容器是一种容纳特定类型对象的集合.C++的容器可以分为两类:顺序容器和关联容器.顺序容器的元素排列和元素值大小无关,而是由元素添加到容器中的次序决定的.标准库定义了三种顺序容器的类型:vector.list和deque(双端队列).此外,标准库还提供了三种容器适配器:stack.queue和prioroty_queue类型.适配器是根据原始的容器类型所提供的操作,通过定义新的操作接口,来适应基础的容器类型.见下表 顺序容器 vector 支持快速随机访问 list 支持快速插入/删除 deq…
c/c++ 标准顺序容器 容器的访问,删除 操作 pop_front:vector,string不支持 pop_back:forward_list不支持 知识点 1,front, back, at 成员函数的使用,对应代码里的test1 2,删除最后一个元素pop_back, 删除第一个元素pop_front,对应代码里的test2 3,删除指定位置的元素erase,并返回下一位置的迭代器 ,对应代码里的test3 #include <vector> #include <string&g…
c/c++ 标准顺序容器 之 push_back,push_front,insert,emplace 操作 关键概念:向容器添加元素时,添加的是元素的拷贝,而不是对象本身.随后对容器中元素的任何改变都不会影响到原始对象,反之亦然. 关键警告:因为vector,deque,string的内存存储都是在连续的空间上,所以向vector,deque,string的头尾以外的位置插入元素或者删除元素,会产生元素的移动,就会非常耗时,这时就应该考虑使用双向链表list,但是list不支持下标操作 知识点…
一.顺序容器操作 1.向顺序容器添加元素 向顺序容器(array除外)添加元素的操作: 操作 说明 c.push_back(t) 在c的尾部创建一个值为t的元素.返回void c.emplace_back(args) 在c的尾部创建一个由args创建的元素.返回void c.push_front(t) 在c的头部创建一个值为t的元素.返回void c.emplace_front(args) 在c的头部创建一个由args创建的元素.返回void c.insert(p, t) 在迭代器p指向的元素之…
容器分为顺序容器与关联容器,顺序容器也称为序列式容器.序列式容器按元素插入的顺序存储元素,这些元素可以进行排序,但未必是有序的.C++本身内置了一个序列式容器array(数组),STL另外提供了vector,list,forward_list,deque,stack,queue,priority-queue,string等等序列式容器.所有的容器都是基于模板实现的,因为容器必须保证能装得下各种各样的类型.其中,stack,queue都是基于deque来实现的,priority-queue基于he…