首页 > 代码库 > 第一篇:STL简介

第一篇:STL简介

写在前面的话:在网上找了好多都没有找到合适的STL资料,无奈只能看英文的,可是英文水平着实太搓,翻译下来自己都感觉不好意思,所以挂上来让大家指正,希望多多批评!


标准模版库介绍(STL)

  标准模版库,或者STL,是一种C++容器类库,算法和迭代器;它提供很多种计算机科学的基础算法和数据结构。
STL是一种一般的库,意味着它的组件有强烈的参数化,几乎每一个STL的组件都是一个模板。你应该在你使用STL
之前理解模板是如何在C++中工作的。

容器和算法

  和很多类库一样,STL包括容器类,这些类库目的是包括其他对象。STL包括vector,list,deque,set,multiset, 

map, multimap, hash_set, hash_multiset, hash_map, and hash_multimap类。这些类中的每一种都是一个模板,
并且可以被实例化为包含对象的任意类型。例如,你可以用vector<int>来实现你在C语言数组中的很多使用方式,除了
vector消除了手工管理动态内存分配的任务。

1 vector<int> v(3);            // 声明有三个元素的容器2 v[0] = 7;3 v[1] = v[0] + 3;4 v[2] = v[0] + v[1];          // v[0] == 7, v[1] == 10, v[2] == 17  

   STL还包括一个大的操作存储在容器中数据的算法集合。你可以颠倒vector中元素的顺序,例如,通过使用reverse算法

reverse(v.begin(), v.end()); // v[0] == 17, v[1] == 10, v[2] == 7 

  关于reverse的调用,有两点需要注意。首先,它是一个全局函数,而不是一个成员函数;其次,它接受两个参数而不是一个
;它操作一系列元素,而不是一个容器。在这个特殊的情况下,这些变化适用于所有容器。 

  造成这些事实的情况是相同的:reverse,像其他STL算法一样,是脱离STL容器类的。这也就意味着reverse不仅可以颠倒容器中元素的顺序,也可以适用于list中的元素,并且甚至适用于C中数组的元素。
  下列程序也是有效的

1     double A[6] = { 1.2, 1.3, 1.4, 1.5, 1.6, 1.7 };2      reverse(A, A + 6);3      for (int i = 0; i < 6; ++i)4      cout << "A[" << i << "] = " << A[i];

   本例使用范围,就像颠倒vector的例子:颠倒第一个参数是指向范围的开始,第二个参数指向最后一个元素的下一个。该范围表示[A,A+6);非对称符号是一个提示,两个端点是不同的,即,首先是该范围的开头和第二个参数指向最后一个元素的下一个。

  迭代器,未完,待续。。。

第一篇:STL简介