【C++】 C++标准模板库(十二) 迭代器和STL

来源:互联网 发布:xp无法连接网络打印机 编辑:程序博客网 时间:2024/05/21 09:10

1. C++ Iterators(迭代器)

迭代器可被用来访问一个容器类的所包函的全部元素,其行为像一个指针。举一个例子,你可用一个迭代器来实现对vector容器中所含元素的遍历。有这么几种迭代器如下:

迭代器描述input_iterator提供读功能的向前移动迭代器,它们可被进行增加(++),比较与解引用(*)。output_iterator提供写功能的向前移动迭代器,它们可被进行增加(++),比较与解引用(*)。forward_iterator可向前移动的,同时具有读写功能的迭代器。同时具有input和output迭代器的功能,并可对迭代器的值进行储存。bidirectional_iterator双向迭代器,同时提供读写功能,同forward迭代器,但可用来进行增加(++)或减少(--)操作。random_iterator随机迭代器,提供随机读写功能.是功能最强大的迭代器, 具有双向迭代器的全部功能,同时实现指针般的算术与比较运算。reverse_iterator如同随机迭代器或双向迭代器,但其移动是反向的。(Either a random iterator or a bidirectional iterator that moves in reverse direction.)(我不太理解它的行为)

第种容器类都联系于一种类型的迭代器。第个STL算法的实现使用某一类型的迭代器。举个例子,vector容器类就有一个random-access随机迭代器,这也意味着其可以使用随机读写的算法。既然随机迭代器具有全部其它迭代器的特性,这也就是说为其它迭代器设计的算法也可被用在vector容器上。

如下代码对vector容器对象生成和使用了迭代器:

  vector<int> the_vector;  vector<int>::iterator the_iterator;  for( int i=0; i < 10; i++ )    the_vector.push_back(i);  int total = 0;  the_iterator = the_vector.begin();  while( the_iterator != the_vector.end() ) {    total += *the_iterator;    the_iterator++;  }  cout << "Total=" << total << endl;

提示:通过对一个迭代器的解引用操作(*),可以访问到容器所包含的元素。 



2. C++ 标准模板库(STL)

C++ STL (Standard Template Library标准模板库) 是通用类模板和算法的集合,它提供给程序员一些标准的数据结构的实现如 queues(队列), lists(链表), 和 stacks(栈)等.

C++ STL 提供给程序员以下三类数据结构的实现:

  • 顺序结构
    • C++ Vectors
    • C++ Lists
    • C++ Double-Ended Queues
  • 容器适配器
    • C++ Stacks
    • C++ Queues
    • C++ Priority Queues
  • 联合容器
    • C++ Bitsets
    • C++ Maps
    • C++ Multimaps
    • C++ Sets
    • C++ Multisets

程序员使用复杂数据结构的最困难的部分已经由STL完成. 如果程序员想使用包含int数据的stack, 他只要写出如下的代码:

stack<int> myStack;

接下来, 他只要简单的调用 push() 和 pop() 函数来操作栈. 借助 C++ 模板的威力, 他可以指定任何的数据类型,不仅仅是int类型.  STL stack实现了栈的功能,而不管容纳的是什么数据类型.


1 0
原创粉丝点击