目录
vector容器
vector的定义
//一维数组 vector<int> list; //二维数组,Arrayname[]中的每一个元素都是一个vector vector<typename> Arrayname[size]; //嵌套使用 vector<vector<int>>list;
vector常用初始化方法
//直接使用花括号赋值 vector<int> v{1,2,3,4,5}; //初始化5个值为4的元素 vector<int> v(5, 4); //初始化5个值为0的元素 vector<int> v(5);
vector常用函数
//在vector容器v后面添加一个元素x,时间复杂度为O(1) v.push_back(x) //删除vector的尾元素,时间复杂度为O(1) v.pop_back() //用来获得vector中元素的个数,,时间复杂度为O(1) v.size() //用来清空vector中的所有元素,时间复杂度为O(N),N为vector中的元素个数 v.clear() //用来向vector的任意迭代器it处插入一个元素x,时间复杂度O(N) v.insert(v.begin() + 2, -1); //将-1插入v[2]的位置 v.insert(v.end(), v1.begin(), v1.end());//拼接连个容器 //erase()有两种用法:删除单个元素、删除一个区间内所有元素。时间复杂度为O(N)。 v.erase(v.begin() + 2);//删除某个元素 v.erase(v.begin() + 1, v.begin() + 3);//删除某个区间,左闭右开
map容器
map和multimap区别
- map不允许容器中有重复key值元素
- multimap允许容器中有重复key值元素
map的定义
//定义m1
map<int, int> m1;
//m1赋值到m2
map<int, int>m2(m1);
//m2赋值到m3
map<int, int>m3;
m3 = m2;//初始化
map<int, std::string> myMap1 = { {1, "one"}, {2, "two"} }
map常用函数
m.size() 返回map中元素的个数
m.empty() 如果map为空则返回true
m.swap(m1) 两个map交换元素
m.first() 获取key
m.second() 获取value
//插入 m1.insert(pair<int, int>(1, 10)); m1.insert(make_pair(2, 20)); m1.insert(map<int, int>::value_type(3, 30)); m1[4] = 40; //删除 m1.erase(m1.begin()); m1.erase(3); //按照key删除 m1.erase(m1.begin(), m1.end()); //全部删完了 m1.clear(); //清空m1 //查找和统计 map<int, int>::iterator pos = m1.find(3);//返回迭代器 int num = m1.count(3);//返回指定元素出现的次数,map只能是1,multimap可以大于1,可以重复
set容器
1、在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们。
2、set容器通过key访问单个元素的速度通常比unordered_set容器慢,但它们允许根据顺序对子集进行直接迭代
3、set中的底层使用二叉搜索树(红黑树)来实现。
4、 set 会自动排序,且重复的数据会直接跳过(小到大)
set定义
//定义s1
set<int>s1;
//s1赋值到s2
set<int>s2(s1);
//s2赋值到s3
set<int>s3;
s3=s2;
set常用函数
s. size ( ) 返回元素个数 (注意不支持 resize 重新指定大小)
s.empty () 判断是否为空
s.swap (s1) 交换两个容器
//插入 s.insert(10); //删除 s.clear(); //清空 s.erase(10); //指定元素删除 s.erase(s.begin()); //迭代器删除 s.erase(s.begin(),s.end());//删除区间 //查找和统计 s.find(key) //查找key是否存在 s..count(key) //统计key的个数