C++标准模板库介绍
Vector
vector的定义:
vector vi[100]
vector<vector >vi;
区别可以理解成一个是一个一维长度已经固定,一个是可变的
vector内元素的访问:
(1)通过下边
(2)通过迭代器
vector::iterator it=vi.begin()
v[i]和*(v.begin()+i)等价
vector常用函数:
(1)push_back()在容器尾部添加元素
(2)pop_back()删除尾元素
(3)size()
(4)clear() 时间复杂度 O(N)
(5)insert()用来响vector的任意迭代器it处插入一个元素x,时间复杂度O(N)
(6)erase()
删除单个元素erase(it)
删除一个区间内所有元素erase[first,last) 两个时间复杂度都为O(N)
(7)v.end()容器尾元素地址的下一个地址
Set
集合:内部自动有序且不含重复元素的容器(自动按递增排序)
set的定义
set< typename> name
总的来说和vector类似
set容器内元素的访问
只能通过迭代器访问(iterator)
set< typename>::iterator it;
for(it=name.begin();it!=name.end();it++);
set常用函数示例解析
(1)insert();
(2)find(value)返回set中对应值为value的迭代器,时间复杂度为O(logN),N为set内元素个数
(3)erase(),可以结合set一起用
erase(it);
erase(s.begin(),s.end());
(4)size();
(5)clear()
如果不需要排序可以使用unordered_set速度比set快得多
string
string的定义
string str;
string str=“abcd”;
string中内容的访问
(1)通过下标访问
(2)通过迭代器访问
string常用函数
(1)operator +=
(2)compare operator
(3)size()
(4)insert
- insert(pos,string),在pos号位置插入字符串string
string str=“abcxyz”,str2=“opq”;
str.insert(3,str2);
cout<<str;
//str=“abcopqxyz” - insert(it,it2,it3)用来表示串[it2,it3)将被插在it的位置上
(5)erase();
- erase(it)
- erase(first,end) 删除[first,end)位置上的的元素
(6)clear()
(7)substr(pos,len)返回pos号位开始,长度为len的子串
(8)
- find(str2)当str2是str的子串是,返回其在str 中第一次出现的位置;如果不是str的子串则返回string::npos
- find(str2,pos)从pos位开始匹配str2返回值和上面相同
(9)replace(pos,len,str2)把str从pos处开始的长度为len的子串替换为str2
replace(it1,it2,str2)
map
map的定义
map<string,int>mp;
map<set,string >mpl
map容器内元素的访问
(1)通过下标访问
(2)通过迭代器访问
for(map<char,int>::iterator it=mp.begin();it!=mp.end();it++){
printf("%c %d\n",it->first,it->second);
}
map常用函数解析
(1)find(key)返回key的映射的迭代器
(2)erase()
删除单个元素
- erase(it),it为需要删除的元素迭代器
- erase(first,last) 删除范围[first,last)
(3)size()
(4)clear()
map常见用途
- 需要建立字符(字符串)与整数之间的映射的题目
- 判断大整数或者其他类型数据是否存在的题目,可以把map当bool数组
- 字符串和字符串的映射
unorder_map用来处理只映射不排序的需求,速度比map要快的多。
queue
- front()首元素,back()尾元素
- push(),back()
- empty()
- size()
queue常见用途
当需要实现广度优先搜索时,可以不用自己手动实现一个队列,而是用queue作为替代
priority_queue
- push(),pop()
- top()队首元素
- empty()
- size()
prioirty_queue 内元素优先级的设定
-
priority_queueq;
priority_queue<int,vector,less >q;
上面两者等价 表示数字大的优先级高
greater表示数字小的优先级高 -
结构体优先级设置
struct fruit{
string name;
int price;
friend bool operator < (fruit a,fruit b){
return a.price<b.price;}
}
priority_queuek;
优先队列中的这个函数和sort中的cmp函数的效果刚刚好是相反的
struct cmp{
bool operator<(fruit a,fruit b){
a,price>b.price;
}
}
priority_queue<fruit,vector,cmp>k;
效果和上面用友元函数重载一模一样
set也可以通过第一种友元函数对运算符的重载方法来定义优先级
priority_queue常见的用途
priority_queue可以用来解决一些贪心问题,也可以对Dijkstra算法进行优化
stack
stack常见用途
stack用来模拟一些递归算法
Pair
Pair常见用途
- 用来替代二元结构体及其构造函数,可以节省编码时间
- 作为map的键值用来插入