`
mmdev
  • 浏览: 12888906 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

再学C++ Primer(9)-顺序容器

 
阅读更多
顺序容器:
vector: 支持快速随机访问;
list:支持快速插入/删除,类似与链表
deque:爽端队列。
使用默认构造函数能达到最佳运行时性能,并使容器更易使用。


将一个容器初始化为另一个容器的副本:
vector<int> ivec;
vecror<int> ivec2(ivec);
容器类型和元素类型都必须相同。


接受容器大小做形参的构造函数只适用于顺序容器,而关联容器不支持这种初始化。


容器元素类型必须满足以下两个约束:
1)元素类型支持赋值运算;
2)元素类型的对象必须可以复制


使用迭代器编写程序时,必须留意哪些操作会使迭代器失效,(如元素的增加和删除)。
使用无效的迭代器将会导致严重的运行错误,当编写循环将元素插入到vector或deque容器
时,程序必须确保迭代器在每次循环后都得到更新。


reverse_iterator:逆迭代器,按逆序寻址的迭代器,从后向前遍历容器,并反转了某些
相关的迭代器操作。


容器的关系操作符:类似于字符串的关系运算,且只允许两个容器做其元素类型定义的关系运算。


容器的assign操作:赋给容器全新值,操作首先会删除容器中原来存储的所有元素。 有两个版本。
容器的swap操作:不会删除或插入任何元素,而且在常量时间内实现交换。
例子:
#include <iostream>
#include <list>
using namespace std;


int main ()
{
list<int> first;
list<int> second;


first.assign (7,100); // 7 ints with value 100


second.assign (first.begin(),first.end()); // a copy of first


int myints[]={1776,7,4};
first.assign (myints,myints+3); // assigning from array


cout << "Size of first: " << int (first.size()) << endl;
cout << "Size of second: " << int (second.size()) << endl;
return 0;
}


Output:
Size of first: 3
Size of second: 7


每当vector容器不得不分配新的存储空间时,以加倍当前容量的分配策略重新分配。
以最小的代价连续存储元素。由此而带来的访问元素的便利弥补了其存储代价。


容器的特点及选择:
选择容器要考虑的问题:
1)在容器的中间位置添加或删除元素的代价;
2)执行容器元素的随机访问的代价。


vector和deque:优点:快速随机访问;缺点:任意位置插入或删除元素代价大,类似数组。
list:优点:在任意位置都能快速插入和删除;缺点:随机访问慢,类似链表;
deque和vector的一个不同点:deque提供高效地在其首部实现insert和erase的操作,就像在容器尾部一样。


在deque容器首部或尾部插入元素不会使任何迭迭代器失效。


由于vector容器的每次访问都是距离其起点的固定偏移,因此其随机访问非常有效率。在list容器中,元素之间移动的唯一
方法是顺序跟随指针。


选择容器的原则:
1)如果程序要求随机访问元素,则选deque或vectore;
2)如果程序必须在容器的中间位置插入或删除元素,则应采用list容器;
3)如果程序不是在容器的中间位置,而是在容器首部或尾部插入或删除元素,则采用deque;
4)如果只需要在读取输入时在容器的中间位置插入元素,然后需要随机访问元素,则可考虑在输入时将元素读入到一个
list容器,接着对此容器排序,使其适合顺序访问,然后将排序后的list容器复制待一个vector中。
总之,决定使用哪种容器可能需要剖析各种容器类型完成应用所要求的各类操作的性能。


priority-queue:优先队列,插入元素的话将其放在优先级低的元素前面。
分享到:
评论

相关推荐

    《C++ Primer》学习笔记(27)顺序容器

    本文章是关于C++ 中顺序容器的相关内容。

    C++ Primer习题集(第五版)

    第9 章顺序容器...................................................... 193 练习9.1 练 习9.52 第10章泛型算法..................................................... 234 练习10.1 练 习10.42 目录 ◄ v 第11章...

    C++Primer第五版 第9章 顺序容器(练习解答)

    C++Primer第五版 第9章 顺序容器(练习解答)个人总结的文档+源码

    C++ Primer第四版【中文高清扫描版】.pdf

    第9章 顺序容器 263 9.1 顺序容器的定义 264 9.1.1 容器元素的初始化 265 9.1.2 容器内元素的类型约束 267 9.2 迭代器和迭代器范围 268 9.2.1 迭代器范围 270 9.2.2 使迭代器失效的容器操作 271 9.3 顺序容器的操作...

    非常经典的c++ primer视频教程6-10

    本课程是C++ Primer初级教程,课程内容是学习C++语言基础知识,对应着教材的第1章到第8章。 第1章 快速入门 1.1 编写简单的C++程序 1.2 初窥输入/输出 1.2.1 标准输入与输出对象 1.2.2 一个使用IO库的程序 ...

    C++primer 课后题答案

    C++primer 课后题答案 目录 第一章 快速入门 2 第二章 变量和基本类型 7 第三章 标准库类型 13 第四章 数组和指针 21 第五章 表达式 31 第六章 语句 37 第七章 函数 37 第八章 标准IO库 37 第九章 顺序容器 43 第十...

    C++Primer视频(中级)下载地址

    1.第9章 顺序容器 - STL deque 2.第9章 顺序容器 - STL list 3.第9章 9.7 容器适配器 - 栈适配器 4.第9章 9.7 容器适配器 - 队列 5.第9章 9.7 容器适配器 - 优先级队列 6.第9章 9.1 顺序容器的定义 7.第...

    C++ Primer中文版(第5版)李普曼 等著 pdf 1/3

     第9章 顺序容器 291  9.1 顺序容器概述 292  9.2 容器库概览 294  9.2.1 迭代器 296  9.2.2 容器类型成员 297  9.2.3 begin和end成员 298  9.2.4 容器定义和初始化 299  9.2.5 赋值和swap 302  9.2.6 容器...

    C++Primer笔记之顺序容器的使用详解

    顺序容器,它将单一类型元素聚集起来成为容器,然后根据位置来存储和访问这些元素,这就是顺序容器。标准库里定义了三种类型:vector(支持快速随机访问)、list(支持快速插入、删除)、deque(双端队列)容器只定义了...

    C++ 顺序容器

    此程序是c++ primer 中,第九章有关顺序容器的练习内容。程序为自己编写的模板,感兴趣的朋友可以下载然后自行修改,实现功能

    C++Primer(第5版 )中文版(美)李普曼等著.part2.rar

     第9章 顺序容器 291  9.1 顺序容器概述 292  9.2 容器库概览 294  9.2.1 迭代器 296  9.2.2 容器类型成员 297  9.2.3 begin和end成员 298  9.2.4 容器定义和初始化 299  9.2.5 赋值和swap 302  9.2.6 容器...

    C++ Primer 3rd Edition 中文完美版

    的string 类型一组顺序和关联容器类型比如vector list map 和set 以及在这些类型 上进行操作的一组可扩展的泛型算法generic algorithm 都是这个新标准库的特性本书 不但包括了许多新的资料而且还阐述了怎样在C++中...

    c++ primer 第5版(李普曼) part3

    难以计数的程序员已经通过旧版的《C++ Primer》学会了C++语言。而在这段时间中,C++本身又已成熟了许多:语言本身的关注点和程序设计社区的关注点都已大大开阔,已经从主要关注机器效率转变为更多地关注编程效率。 ...

    C++ primer 第4版 原书+习题解答+源码 清晰pdf

     第9章 顺序容器  第10章 关联容器  第11章 泛型算法  第三部分 类和数据抽象  第12章 类  第13章 复制控制  第14章 重载操作符与转换  第四部分 面向对象编程与泛型编程  第15章 面向对象...

    C++Primer中文版(第4版).part4

     第9章 顺序容器  第10章 关联容器  第11章 泛型算法  第三部分 类和数据抽象  第12章 类  第13章 复制控制  第14章 重载操作符与转换  第四部分 面向对象编程与泛型编程  第15章 面向对象编程 ...

    C++ Primer习题集 第5版(完整版)

    第9章 顺序容器 193 练习9.1~练习9.52 第10章 泛型算法 234 练习10.1~练习10.42 第11章 关联容器 273 练习11.1~练习11.38 第12章 动态内存 297 练习12.1~练习12.33 第13章 拷贝控制 331 练习13.1~...

    高级java笔试题-Lookoop:学习笔记

    c++primer顺序容器与关联容器的一些用法 effective c++ - effective c++笔记归纳 Data Structures and Algorithm Analysis 数据结构与一些算法,来自算法导论,数据结构与算法分析-C语言描述,C Primer Plus, 数据...

    [C++ Primer中文版(第4版)].习题解答(1-18章完整版)

    37 第九章 顺序容器 ..................................................................................................................................................... 43 第十章 关联容器 ..............

    C++ 后台工程师面试宝典

    C++primer5笔记代码资料 STL 源码剖析 再硬核|5 千字长文+ 30 张图解 | 陪你手撕 STL 空间配置器源码 硬核|万字长文炸裂!手撕 STL 迭代器源码与 traits 编程技法 超硬核 | 2 万字+20 图带你手撕 STL 序列式容器源码...

    Accelerated C++源代码

    多数C++教材按照下面的顺序展开:先讲低级细节,再介绍更高级的语言特征;在讲完整个语言后才开始解释标准库。结果往往使读者纠缠于低级的程序设计问题和复杂类型定义的编写等细节,而不能真正领会抽象编程的力量。...

Global site tag (gtag.js) - Google Analytics