STL中主要有6种组件
容器
类属算法
迭代器
函数对象
适配器
分配器
1. 容器
1.1 序列容器
序列容器将一组具有相同类型(T)的对象以严格线性的形式组织在一起
l vector<T> 提供对变长序列的随机访问,对序列末尾的插入和删除的操作时间是分摊常量的。
l deque<T> 提供对变长序列的随机访问,对序列开头和末尾的插入和删除的操作时间均是分摊常量的。
l list<T> 提供对变长序列的线性时间访问(O(N),其中N是序列的当前长度),但是对序列中任意位置的插入和删除操作均为常量时间的。
02-01.cpp
//对string和数组使用STL类属算法reverse
#include <iostream>
#include <string>
#include <cassert>
#include <algorithm>
using namespace std;
int main(){
cout << "using reverse algorithm with a string " << endl;
string string1 = "mark twain";
reverse(string1.begin(),string1.end());
assert(string1 == "niawt kram");[g1]
cout <<string1<< "--- ok." << endl;
cout << "using reverse algorithm with an array" << endl;
char array1[] ="mark twain";
int N1=strlen(array1) ;
reverse(&array1[0],&array1[N1]);
assert (string(array1) == "niawt kram");
cout<<string(array1)<<"--- ok." << endl;
system("pause");
return 0;
}
向量vector提供了数组的所有特性,除此之外,向量还有许多其他有用的特性,而且是可扩展的
02-02.cpp
//对向量使用STL类属算法reverse
#include <iostream>
#include <vector>
#include <cassert>
#include <algorithm>
using namespace std;
template <typename container>
container make(const char s[]){
return container(&s[0],&s[strlen(s)]);
}
int main(){
cout<< "using reverse algorithm with a vetor" << endl;
vector<char> vector1 = make <vector<char> >("mark twain");
reverse(vector1.begin(),vector1.end());
assert(vector1 == make< vector<char> >("niawt kram"));
cout << "--- ok." << endl;
system("pause");
return 0;
}
1.2 有序关联容器
有序关联容具有从基于键的集合中快速提取对象的能力。集合的大小可在运行时改变。
l Set<Key> 支持唯一的键(每个键值只能有一个)并提供对键本身的快速检索
l Multi<key> 支持可重复的键(同一键值可以有多个副本)并提供对键本身的快速检索
l Map<Key> 支持惟一的(Key类型的)键并提供对另一个基于键的类型的T的快速检索
l Multimap<Key,T> 支持可重复的(Key类型的)键并提供对另一个基于键的类型T的快速检索。
2.类属算法
STL中最简单的类属算法时find和merge
2.1 类属查找算法
Find
Where = find(first,last,value)
l 迭代器first表示算法对序列进行处理的起始位置
l 迭代器last表示算法对序列进行出来的终止位置
★ 表对应的迭代器不支持 *(where+1)中的+运算,但所有的STL迭代器都要求支持++
2.2 类属合并算法
Merge
Merge 算法的功能师将两个序列内元素合并道一个序列中
Merge(first1,last1,first2,last2,result)
l First1和last1表示一个输入序列的起始和终止,类型为T
l First2和last2表示一个输入序列的起始和终止,类型为T
l 按照类型T上的<的定义,两个输入序列均为升序
l Result表示合并后存放元素的起始位置
[g1]Assert宏
使用了cassert头文件中的assert宏来检查reverse函数的调用结果。这个宏以一个布尔表达式作为其唯一的参数,如果改表达式为真,则该宏什么也不作,如果该表达式为假,则打印一段信息并中止程序的运行。