C++标准模板库(STL)
1. vector 变长数组
#include<vector>
vector<typename> name;
vector<vector<int> > name;// > >之间一定要加空格,否则,在C++11之前会视为移位
访问方式:
1.下标访问 vector<typename> v; v[1]
2.迭代器访问 vector<typename>::iterator it = v.begin(); *(it+1);
begin() end() 左闭右开
常用函数:
1 push_back(),添加一个元素,时间复杂度O(1);
2 pop_back(),删除尾元素,时间复杂度O(1);
3 size(),获取vector中元素的个数,时间复杂度O(1);
4 clear(),清空vector中所有元素,时间复杂度O(N);
5 insert(),在任意it位置插入一个元素,时间复杂度O(N);
6 erase()
1 删除单个元素 v.erase(v.begin()+3);
2 删除一个区间内的所有元素[first,last)
v.erase(v.begin()+1,v.begin()+4)//删除v[1],v[2],v[3]
常见用途:
1 本身作为数组使用
2 用邻接表存储图
2. set 集合,一个内部自动有序不含重复元素的容器。加入set,自动排序
#include<set>
set<typename> name;
访问方式:
1 只能通过迭代器访问 set<typename>::iterator it;
除开vector 和 string之外的STL容器都不支持*(it+i)的访问方式
for(set<int>::iterator it=s.begin();it!=s.end();it++){
.......
}
常用函数:
1 insert(),将x插入到set中,并且,自动递增排序和去重,时间复杂度O(logN)
2 find(),返回set中对应为value的迭代器,时间复杂度为O(logN)
3 erase()
1 删除单个元素:
1 s.erase(s.find(10));
2 s.erase(10);
2 删除一个区间内的所有元素[first,last)
last是所需删除区间的末尾迭代器的下一个地址
4 size(),获取set内的元素个数,时间复杂度O(1).
5 clear(),清空set中的所有元素,时间复杂度O(N)。
常见用途:
1 自动去重,并,升序排列
2 元素唯一,如果处理不唯一的情况,使用multiset,
C++11中还增加了unordered_set,用散列代替set内部的红黑树实现,
使其只处理去重,不排序的需求。
3. string,C语言中字符数组char str[]的升级版
#include<string>
string str;
访问方式:
1 下标访问,str[i]
2 迭代器访问 string::iterator it;
for(string::iterator it=str.begin();it!=str.end();it++){
.......
}
常用函数:
1 operator+= string的加法,直接拼接,str1 += str2;
2 compare operator,==,!=,<,<=,>,>=比较大小,规则是字典序
3 length()/size() 长度,时间复杂度O(1)
4 insert(),时间复杂度是O(N)
insert(pos,string);
insert(it,it2,it3); //[it2,it3)
5 erase()
1 删除单个元素
2 删除一个区间内的所有元素
6 clear(),时间复杂度是O(1)
7 substr(pos,len),返回从pos号位开始,长度为len的子串,时间复杂度O(len);
8 string::npos,本身其值为-1,由于是unsigned_int类型,
可认为是unsigned_int的最大值
用于find函数失配时的返回值
9 str1.find(str2);
str1.find(str2,pos);
10 replace() str.replace(pos,len,str2);
str.replace(it1,it2,str2);
4. map 映射,将任何基本类型 映射到 任何基本类型
#include<map>
using namespace std;
map<typename1,typename2> mp;
// 如果是字符串映射到整型,必须使用string而不是char数组,char数组不能作为键值的
map<string,int> mp;
map<set<int>,string> mp;
访问方式:
1 下标访问