C++学习笔记(四)
来源:互联网 发布:国内代理软件 编辑:程序博客网 时间:2024/06/15 17:22
1.抽象容器类型
(1)顺序容器:拥有由单一类型元素组成的一个有序集合。两个主要的顺序容器是List 和 vector。
(2)关联容器:支持查询一个元素是否存在,并且可以有效的获取元素。两个基本的关联容器是map(映射)和set(集合)。
map是一个键值对,map可以很好的支持电话目录;
set包含一个单一键值,有效支持关于元素是否存在的查询。
vector表示一段连续的内存区域,每个元素被顺序寻存储在这段内存中,在vector的随机访问效率很好,因为每次访问离vector起始处的位移都是固定的,但是,在任意位置,而不是在vector末尾插入元素,则效率很低,因为他需要把带插入元素右边的每个元素都拷贝一边。
list表示非连续的内存区域,并通过一对指向首尾元素的指针双良链表起来,从而允许向前和向后两个方向进行遍历。在list的任意位置插入和删除元素的效率都很好,从而允许被重新赋值,但是,不需要用拷贝元素来实现移动。另一方面,它对随机访问的支持并不好,访问一个元素都需要遍历中间的元素,另外,每个元素还有两个指针的二外空间开销。
选择顺序容器类型的一些准则:
a.如果我们需要随机访问一个容器,则vector要比list好的多。
b.如果我们已知要存储元素的个数,则vector又是一个比list好的选择。
c.如果我们需要的不只是在容器两端插入和删除元素,则list显然要比vector好。
d.除非我们需要在容器首部插入和删除元素,否则vector要比deque好。
2.迭代器(iterator)
迭代器提供了一种一般化的方法,对顺序或关联容器类型中的每个元素进行连续访问。
例如:iter是任意容器类型的一个iterator,则++iter向前移动迭代器,使其指向容器的下一个元素,而×iter返回iterator指向元素的值。
每种容器类型都提供一个begin()和一个end()成员函数;
a.begin()返回一个iterator,他指向容器的的一个元素;
b.end()返回一个iterator,它指向容器的末元素的下一个位置。
为了迭代任意容器类型的元素,我们可以这样写:
for(iter = container.begin(); iter !=container.end();iter++){
do_something(*iter);
}
3.泛型算法
- c学习笔记<四>
- 《C和指针》学习笔记(四)
- [C++]C++学习笔记(四)
- C语言学习笔记(四)数组
- C语言程序学习(四)笔记
- 《Effective C++》学习笔记(四)
- Objective-c 学习笔记(四)
- C语言学习笔记(四)
- 《effective c++》学习笔记(四)
- C语言学习笔记(四)
- c语言学习笔记四
- C/C++学习笔记(四)
- object-c 学习笔记四
- Objective C学习笔记(四)
- C语言学习入们到精通之学习笔记(四)
- iOS开发学习笔记-C语言学习(四)
- IOS之Objective-C学习笔记(四)
- (c/c++学习笔记四)指针基础
- 穆利堂推荐机会来了你做好准备了吗?怎么让机会找到你?
- 算法导论-第6章
- 在网页上添加分享到朋友圈、发送给好友、分享等按钮
- 12468 - Zapping
- linux网络编程之posix 线程(二):线程的属性和 线程特定数据 Thread-specific Data
- C++学习笔记(四)
- Simulink的求解器
- oracle常用的复合数据类型 : BULK COLLECT(成批聚合类型)和数组集合type类型is table of 表%rowtype index by binary_integer
- 微信公众平台如何与Web App结合?
- 为何在做数组安全验证时,既要验证是否为null,又要验证长度是否为0
- 设计模式:观察者模式(observer) java实现及原理
- Java线程中run和start方法的区别
- ANDROID NDK环境搭建
- Python快速教程总结