1.STL简介---标准模板库
三大主体(algorithm、containers、iterator)、六大组件(algorithm、containers、iterator、仿函数、适配器、空间配置器)、十三头文件
容器(向量、链表、栈、队列、双向队列、集合、映射)--(头文件:vector、list、stack、queue、deque、set、map)
算法(70)---(头文件:algorithm、numeric、functional)
迭代器---(头文件:iterator、utility、memory)
2.序列式容器
序列式容器:容纳特定类型对象的集合,将单一类型元素聚集起来。根据位置来存储和访问这些元素。
三种顺序容器:vector、list、duque
2.1 vector容器
//头文件
#include<vector>
//Vector对象的定义与初始化
vector<int> ive1;
vector<int> ive2(ive1);
vector<int> ive3(10,-1);
vector<int> ive4(10);
//容器的构造函数与使用
C<T >c; //创建空容器
C c(c2); //拷贝容器
C c(n, t); //创建n个值的容器
C c(n); //初始化n个元素的容器
//vector性质:可以实现动态地高效添加元素
//vector对象的操作
v.empty();//返回vector是否为空
v.size(); //返回vector大小(size_type)
v.push_back(t);//从末尾添加元素t---可以用于添加元素
v[n]; //下标操作,返回元素为n的元素---可以用于初始化,而不能用于添加元素
v1=v2; //将v1中的元素用v2替换
v1==v2; //判断两vector是否相等
2.2使用迭代器
//容器的iterator类型定义
vector<int>:: iterator iter;
//begin操作和end操作
vector<int>:: iterator iter1 = vector.begin();//指向第一个元素
vector<int>:: iterator iter2 = vector.end();//指向末尾后面一个元素
//vector间接引用和迭代器的递增
*iter;//为容器的间接引用,与ivec[]等效
++iter;//迭代器的递增,指向容器的后面元素
//迭代器的其他操作
“==”与“!=”用于判断两个迭代器是否指向同一个元素
//迭代器的应用示例
//用于循环
for (vector<int>::iterator iter = ivec.begin(); iter!=ivec.end(); iter++)
*iter = 0;
2.3 list容器
//头文件
#include<list>
//list的定义和初始化
list<int> list1;
list<int> list2(10);
list<int> list3(10, 1);
//遍历
list<int>::iterator iter = mylist.begin();
list<int>::iterator iter = mylist.end();
//元素的插入
c.insert(p ,t);//在迭代器p前面插入元素t
c.insert(p ,n, t);//在迭代器p前面插入n个值为t的元素
c.insert(p ,b, e);//在迭代器p前面插入由迭代器b和迭代器e标记的范围的元素
//删除
mylist.erase(tra);//删除mylist中的元素tra
3.关联式容器
map--(key, value);
set(key);
3.1 pair类型
//头文件
#include<unility>
//Pair类型提供的操作
pair<T1, T2>p1;//创建空的pair对象
pair<T1, T2>p1(v1,v2);//创建pair对象,first对象初始化为v1,second对象初始化为v2
make_pair<v1, v2>;//以v1和v2创建一个新的pair对象
p.first;//返回first的数据成员
p.second;//返回second的数据成员
//pair的创建和初始化
pair<string, string> anon;
pair<string, int>word_count;
pair<string, string> authors("xa", "ada");
pair<string, string> next_aut;
string first, last;
while(ci>>first>>last)
{
next_aut.make_pair(first, last);
}
//pair对象的操作
通过点操作符访问first与second对象
3.2 map容器
//头文件
#include<map>
//数据键值对Key_value
//map对象的定义
map<string, int> word_count;
//map访问
map<string, int> iterator iter = word_count.begin();
iter->first;//访问key元素
iter-second;//访问value元素
//键成员不可修改、值成员可修改
//map添加元素
word_count["Ana"] = 1;//查找key Ana,无则添加
//查找并读取map元素
word_count.count(""abc);//计算key abc出现的次数
word_count.find("abc");//查找key abc元素,返回指向的迭代器,无则返回end()
3.3 set容器
//头文件
#include<set>
//Set对象的定义
set<int> myset;
//set添加元素
set.insert("abc");
set.insert(ivec.begin(), ivec.end());
//set容器读取元素
set.count("121");
set.find("ada");
//位于头文件<algorithm>的交和并运算
set_itersection(set1.begin(),set1.end(), set2.begin(),set2.end(), inserter(set3.begin(),set3.end()));
set_union(set1.begin(),set1.end(), set2.begin(),set2.end(), inserter(set4.begin(),set4.end()));