标签:
1.迭代器类型
· Input iterators(输入) 提供对数据的只读访问。
· Output iterators(输出) 提供对数据的只写访问。
· Forward iterators(正向) 提供读写操作,并能向前推进迭代器。
· Bidirectional iterators(全向) 提供读写操作,并能向前和向后操作。
· Random access iterators(随机) 提供读写操作,并能在数据中随机移动。
2.几种不同的容器使用的迭代器类型
vector |
随机访问 |
一种随机访问的数组类型,提供了对数组元素进行快速随机访问以及在序列尾部进行快速的插入和删除操作的功能。可以再需要的时候修改其自身的大小 |
deque |
随机访问 |
一种随机访问的数组类型,提供了序列两端快速进行插入和删除操作的功能。可以再需要的时候修改其自身的大小 |
list |
双向 |
一种不支持随机访问的数组类型,插入和删除所花费的时间是固定的,与位置无关。 |
set |
双向 |
一种随机存取的容器,其关键字和数据元素是同一个值。所有元素都必须具有惟一值。 |
multiset |
双向 |
一种随机存取的容器,其关键字和数据元素是同一个值。可以包含重复的元素。 |
map |
双向 |
一种包含成对数值的容器,一个值是实际数据值,另一个是用来寻找数据的关键字。一个特定的关键字只能与一个元素关联。 |
multimap |
双向 |
一种包含成对数值的容器,一个值是实际数据值,另一个是用来寻找数据的关键字。一个关键字可以与多个数据元素关联。 |
#1 vector
2. deque 在首部或尾部删除元素则只会使指向被删除元素的迭代器失效,
任何其他位置的插入和删除操作将使指向该容器元素的所有迭代器失效。
3. list 仅有指向被删除元素的迭代器失效。
4. (mulit)map,(multi)set 仅有指向被删除元素的迭代器失效。
#map与hash_map比较
1、STL的map底层是用红黑树实现的,查找时间复杂度是log(n);
2、STL的hash_map底层是用hash表存储的,查询时间复杂度是O(1);
3、什么时候用map,什么时候用hash_map?
具体的应用,不一定常数级别的hash_map一定比log(n)级别的map要好,hash_map的hash函数以及解决地址冲突等都要耗时间,而且众所周知hash表是以空间换时间的,因而hash_map的内存消耗肯定要大,一般情况下,如果记录非常大,考虑hash_map,查找效率会高很多,如果要考虑内存消耗,则要谨慎使用hash_map。
#容器内存释放
1. vector的clear成员函数可以清除vector中的元素,使其大小减至0。但它却不能减小vector占用的内存。
2. 其他容器的clear成员都会释放其内存。
3. 释放vector占用内存:vector<int> v(500); vector<int>().swap(v)。
标签:
原文地址:http://www.cnblogs.com/hj-blog/p/4433460.html