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.泛型算法

 

原创粉丝点击