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()));