一、什么是STL?
STL = Standard Template Library,标准模板库,惠普实验室开发的一系列软件的统称。
它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。
这可能是一个历史上最令人兴奋的工具的最无聊的术语。从根本上说,STL是一些“容器”的集合,这些“容器”有list,vector,set,map等,STL也是算法和其他一些组件的集合。
STL的目的是标准化组件,这样就不用重新开发,可以使用现成的组件。STL现在是C++的一部分,因此不用额外安装什麽。它被内建在你的编译器之内。(转)
二、个人对STL的使用经验及心得
本次练习感觉到了STL的便利性,在这里,讲一下用的最多的三个:MAP,VECTOR,SORT
MAP:
map是一种容器,他可以以任意数据类型为下标,非常的便利。
头文件:#include <map>
定义:map<data_type1, data_type2> map_name;
如:map<string, int> m;//默认按string由小到大排序
操作:
m.size()返回容器大小
m.empty()返回容器是否为空
m.count(key)返回键值等于key的元素的个数
m.lower_bound(key)返回键值等于key的元素的第一个可安插的位置
m.upper_bound(key)返回键值等于key的元素的最后一个可安插的位置
m.begin()返回一个双向迭代器,指向第一个元素。
m.end()返回一个双向迭代器,指向最后一个元素的下一个位置。
m.clear()讲整个容器清空。
m.erase(elem)移除键值为elem的所有元素,返回个数,对于map来说非0即1。
m.erase(pos)移除迭代器pos所指位置上的元素。
直接元素存取:
m[key] = value;
查找的时候如果没有键值为key的元素,则安插一个键值为key的新元素,实值为默认(一般0)。
m.insert(elem)插入一个元素elem
关于map的迭代器:
map<string,int>m2;
map<string, int>::iterator p1, p2;这里p1,p2就是迭代器,类似于指针。
m.egin()返回一个双向迭代器,指向第一个元素。
m.end()返回一个双向迭代器,指向最后一个元素的下一个位置。
如p1=m.begin(); p1就是指向第一个元素的指针。
另外 迭代器->first是键值 迭代器->second是value
SORTsort是一个排序函数
头文件:#include <algorithm>
sort(begin,end);
sort(begin,end, cmp);
例:
intnum[] = {1,5,6,2,9};
1)sort(num, num + 5);//默认从小到大排序num[]= {1,2,5,6,9};
2)bool cmp(inta, int b){
returna > b;
}
sort(num,num + 5, cmp);//num[] = {9,6,5,2,1};
VECTOR
头文件:#include <vector>
定义:vector<data_type> vector_name;
如:vector<int> v;
操作:
empty() -- 返回bool型,表示vector是否为空 (v.empty())
size() -- 返回vector内元素个数 (v.size())
push_back(data_typea) 将元素a插入最尾端
pop_back()将最尾端元素删除
v[i] 类似数组取第i个位置的元素(v[0])
STL别的知识点和用法还有很多,我会继续在实践中,体会领悟他们。