百度百科
stl是standard template library的简称,中文名标准模板库,惠普实验室开发的一系列软件的统称。从根本上说,stl是一些“容器”的集合,这些“容器”有list,vector,set,map等,stl也是算法和其他一些组件的集合。stl的目的是标准化组件,这样就不用重新开发,可以使用现成的组件。stl现在是c++的一部分,因此不用安装额外的库文件。
在c++标准中,stl被组织为下面的13个头文件:<algorithm>、<deque>、<functional>、<iterator>、<array>、<vector>、<list>、<forward_list>、<map>、<unordered_map>、<memory>、<numeric>、<queue>、<set>、<unordered_set>、<stack>和<utility>。
向量(vector) 连续存储的元素<vector>
列表(list) 由节点组成的双向链表,每个结点包含着一个元素<list>
双队列(deque) 连续存储的指向不同元素的指针所组成的数组<deque>
集合(set) 由节点组成的红黑树,每个节点都包含着一个元素,节点之间以某种作用于元素对的谓词排列,没有两个不同的元素能够拥有相同的次序 <set>
多重集合(multiset) 允许存在两个次序相等的元素的集合 <set>
栈(stack) 后进先出的值的排列 <stack>
队列(queue) 先进先出的执的排列 <queue>
优先队列(priority_queue) 元素的次序是由作用于所存储的值对上的某种谓词决定的的一种队列 <queue>
映射(map) 由{键,值}对组成的集合,以某种作用于键对上的谓词排列 <map>
多重映射(multimap) 允许键对有相等的次序的映射 <map>
一、string
在定义 string 类对象时,string 类自身可以管理内存,程序员不必关注内存的分配细节。
string 类提供的各种操作函数大致分为八类:构造器和析构器、大小和容量、元素存取、字 符串比较、字符串修改、字符串接合、i/o 操作以及搜索和查找。
要使用 string 类,必须包含头文件 <string>
string stuff; getline(cin, stuff); //获取一行字符串
1、构造函数
string strs //生成空字符串 string s(str) //生成字符串str的复制品 string s(str, stridx) //将字符串str中始于stridx的部分作为构造函数的初值 string s(str, strbegin, strlen) //将字符串str中始于strbegin、长度为strlen的部分作为字符串初值 string s(cstr) //以c_string类型cstr作为字符串s的初值 string s(cstr,char_len) //以c_string类型cstr的前char_len个字符串作为字符串s的初值 string s(num, c) //生成一个字符串,包含num个c字符 string s(strs, beg, end) //以区间[beg, end]内的字符作为字符串s的初值
string s('x'); //错误 string s(1, 'x'); //正确 string s("x"); //正确
2、获取字符串长度
str.size(); //返回 string 类型对象中的字符个数 str.length(); //返回 string 类型对象中的字符个数 str.max_size(); //返回 string 类型对象最多包含的字符数。一旦程序使用长度超过 max_size() 的 string 操作,编译器会拋出 length_error 异常。 str.capacity(); //返回在重新分配内存之前string 类型对象所能包含的最大字符数。
3、获取字符串元素:
一般可使用两种方法访问字符串中的单一字符:下标操作符[] 和 成员函数at()。两者均返回指定的下标位置的字符。第 1 个字符索引(下标)为 0,最后的字符索引为 length()-1。
需要注意的是,这两种访问方法是有区别的:
- 下标操作符 [] 在使用时不检查索引的有效性,如果下标超出字符的长度范围,会示导致未定义行为。对于常量字符串,使用下标操作符时,字符串的最后字符(即 ‘