C++学习---STL标准模板库

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()));
posted @ 2019-03-22 20:00  凌·杰特  阅读(278)  评论(0编辑  收藏  举报