首页 > 代码库 > 第一篇: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简介