随笔 - 25  文章 - 29  trackbacks - 0
<2006年7月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

常用链接

留言簿(4)

随笔分类(22)

随笔档案(25)

文章分类(2)

文章档案(2)

相册

最新随笔

搜索

  •  

积分与排名

  • 积分 - 55692
  • 排名 - 402

最新评论

阅读排行榜

评论排行榜

   

Containers in STL can be divided into three categories:
1.sequence containers,
2.associative containers,
3.container adapters.

1.Sequence Containers

Sequence containers maintain the original ordering of inserted elements. This allows you to specify where to insert the element in the container.

The deque (double-ended queue) container allows for fast insertions and deletions at the beginning and end of the container. You can also randomly access any element quickly.

The list container allows for fast insertions and deletions anywhere in the container, but you cannot randomly access an element in the container.

The vector container behaves like an array, but will automatically grow as required.

For more information on the sequence containers, consult the following table:

Sequence Container Native STL

deque

deque Class

ilist

Not Applicable

list

list Class

vector

vector Class

2.Associative Containers

The defining characteristic of associative containers is that elements are inserted in a pre-defined order, such as sorted ascending.

The associative containers can be grouped into two subsets: maps and sets. A map, sometimes referred to as a dictionary, consists of a key/value pair. The key is used to order the sequence, and the value is somehow associated with that key. For example, a map might contain keys representing every unique word in a text and values representing the number of times that word appears in the text. A set is simply an ascending container of unique elements.

Both map and set only allow one instance of a key or element to be inserted into the container. If multiple instances of elements are required, use multimap or multiset.

Both maps and sets support bidirectional iterators. For more information on iterators, see Iterators.

While not officially part of the STL standard, hash_map and hash_set are commonly used to improve searching times. These containers store their elements as a hash table, with each table entry containing a bidirectional linked list of elements. To ensure the fastest search times, make sure that the hashing algorithm for your elements returns evenly distributed hash values.

For more information on the associative containers, consult the following table:

Associative Container Native STL

hash_map

hash_map Class

hash_multimap

hash_multimap Class

hash_multiset

hash_multiset Class

hash_set

hash_set Class

map

map Class

multimap

multimap Class

multiset

multiset Class

set

set Class



3.Container Adapters

The container adapters are simply variations of the above containers. The container adapters do not support iterators.

The priority_queue container organized such that the element with the highest value is always first in the queue.

The queue container follows FIFO (first in, first out) semantics. The first element inserted (pushed) into the queue is the first to be removed (popped).

The stack container follows LIFO (last in, first out) semantics. The last element to be inserted (pushed) on the stack is the first element to be removed (popped).

Since container adapters do not support iterators, they cannot be used with the STL algorithms. For more information on algorithms, see Algorithms.

For more information on the container adapters, consult the following table:

Container Adapter Native STL

priority_queue

priority_queue Class

queue

queue Class

stack

stack Class




Requirements for Container Elements

Elements inserted into an STL container can be of any object type that supplies a public copy constructor, a public 
                                      public 拷贝构造 ,public 析构 ,public 赋值操作符   elem& operator =( elem const &)
destructor, and a public assignment operator. The destructor may not throw an exception. Furthermore, associative 
                                                                       析构不能抛出异常
containers such as set and map must have a public comparison operator defined, which is operator< by default. Some 
                             关联容器  除此外 还应由有 比较操作符
                  operations on containers might also require a public default constructor and a public equivalence operator.




以下是  各容器 迭代器类型输出代码

 1#include <vector>
 2#include <list>
 3#include <deque>
 4#include <set>
 5#include <map>
 6using namespace std;
 7template <typename inputitrator >
 8void predict(inputitrator  a)
 9{   iterator_traits<inputitrator>::iterato_category  b;
10   
11   cout<< endl<< "  "<<typeid(b).name();
12}

13
14
15main()
16
17{
18  vector<int> a;
19  deque<int> b;
20  list<int> c;
21  set<int> d;
22  map<int> e;
23  
24   predict(a.begin());
25   predict(b.begin());
26   predict(c.begin());
27    predict(d.begin());
28     predict(e.begin());
29
30}
output iterator
   -> forward iterator
   -> bidirectional iterator
   -> random-access iterator

input iterator
   -> forward iterator
   -> bidirectional iterator
   -> random-access iterator
posted on 2006-09-18 10:43 黄大仙 阅读(2045) 评论(0)  编辑 收藏 引用 所属分类: c++

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理