vector初始化
vector<int> v; //定义一个空 vector 对象vector<int> v(10); //定义一个具有 10 个元素的 vector 对象(int 型元素默认初始化为 0)vector<int> v(3,5); //v = { 5, 5, 5 }vector<int> v1(v); //v1 = vvector<int> v = { 1, 2, 3 };vector<int> v1 = v;set<char> s { 'a', 'b', 'c' };vector<int> v (s.begin(), s.end()); // v = { 97, 98 , 99}vector<string>({ret.begin(), ret.end()});v.insert(it, num);
字符串和数字之间的转换
c++之to_string()函数
函数原型:
string to_string (int val);string to_string (long val);string to_string (long long val);string to_string (unsigned val);string to_string (unsigned long val);string to_string (unsigned long long val);string to_string (float val);string to_string (double val);string to_string (long double val);
字符串转换
#include <stdlib.h>atoi() 函数用来将字符串转换成整数(int)atol() 函数用来将字符串转换成整数(long)atof() 用于将字符串转换为双精度浮点数(double)strtod() 用来将字符串转换成双精度浮点数(double)strtol() 函数用来将字符串转换为长整型数(long)strtoul() 函数源自于“string to unsigned long”,用来将字符串转换成无符号长整型数(unsigned long)
迭代器
vector<int>::iterator i; //定义正向迭代器vector<int>::reverse_iterator i; //定义反向迭代器
stack
#include<stack>stack<int> s;stack< int, vector<int> > stk; //覆盖基础容器类型,使用vector实现stks.empty(); //判断stack是否为空,为空返回true,否则返回falses.size(); //返回stack中元素的个数s.pop(); //删除栈顶元素,(但不返回其值)s.top(); //返回栈顶元素的值,但不删除此元素s.push(item); //在栈顶压入新元素item
queue
#include<stack>queue<int> q; //priority_queue<int> q;q.empty(); //判断队列是否为空q.size(); //返回队列长度q.push(item); //对于queue,在队尾压入一个新元素q.pop() //弹出第一个元素,无返回值//queue only:q.front(); //返回队首元素的值(也就是第一个被置入的元素),但不删除该元素q.back(); //返回队尾元素的值(也就是最后一个被置入的元素),但不删除该元素//priority_queue only:q.top(); //返回具有最高优先级的元素值,但不删除该元素deq.begin();//开始迭代器指针deq.end(); //末尾迭代器指针
priority_queue
priority_queue<int> q;q.empty(); //判断队列是否为空q.size(); //返回队列长度q.push(item); //在基于优先级的适当位置插入新元素q.pop() //弹出优先级最低的元素,没有返回值q.top(); //返回具有最高优先级的元素值,但不删除该元素//升序队列,小顶堆priority_queue <int,vector<int>,greater<int> > q;//降序队列,大顶堆priority_queue <int,vector<int>,less<int> >q;//对于基础类型 默认是大顶堆priority_queue<int> q;
deque
deq.size(); //容器大小deq.empty(); //容器判空deq.push_front(x); //头部添加元素deq.push_back(x); //末尾添加元素deq.insert(iterator it, const T& x); //任意位置插入一个元素deq.insert(iterator it, int n, const T& x); //任意位置插入 n 个相同元素deq.insert(iterator it, iterator first, iterator last); //插入另一个向量的 [forst,last] 间的数据deq.pop_front(); //头部删除元素deq.pop_back(); //末尾删除元素deq.erase(iterator it); //任意位置删除一个元素deq.erase(iterator first, iterator last); //删除 [first,last] 之间的元素deq.clear(); //清空所有元素deq[1]; //下标访问deq.at(1); //at 方法访问deq.front(); //访问第一个元素deq.back(); //问最后一个元素//遍历元素deque<int>::iterator it;for (it = deq.begin(); it != deq.end(); it++)cout << *it << endl;// 或者for (int i = 0; i < deq.size(); i++) {cout << deq.at(i) << endl;}
#include <iostream>#include <deque>using namespace std;int main(int argc, char* argv[]){deque<int> deq;// 头部增加元素deq.push_front(4);// 末尾添加元素deq.push_back(5);// 任意位置插入一个元素deque<int>::iterator it = deq.begin();deq.insert(it, 2);// 任意位置插入n个相同元素it = deq.begin(); // 必须要有这句deq.insert(it, 3, 9);// 插入另一个向量的[forst,last]间的数据deque<int> deq2(5,8);it = deq.begin(); // 必须要有这句deq.insert(it, deq2.end() - 1, deq2.end());// 遍历显示for (it = deq.begin(); it != deq.end(); it++)cout << *it << " "; // 输出:8 9 9 9 2 4 5cout << endl;return 0;}
reverse
#include <algorithm>reverse(deq.begin(), deq.end());
元素排序
#include <algorithm>sort(deq.begin(), deq.end()); // 采用的是从小到大的排序// 如果想从大到小排序,可以采用先排序后反转的方式,也可以采用下面方法:// 自定义从大到小的比较器,用来改变排序方式bool Comp(const int& a, const int& b) {return a > b;}sort(deq.begin(), deq.end(), Comp);
遍历
deque<int>::iterator it;for (it = deq.begin(); it != deq.end(); it++)cout << *it << endl;// 或者for (int i = 0; i < deq.size(); i++) {cout << deq.at(i) << endl;}
list
#include <list>//list定义和初始化list<int>lst1; //创建空listlist<int> lst2(5); //创建含有5个元素的listlist<int>lst3(3,2); //创建含有3个元素的listlist<int>lst4(lst2); //使用lst2初始化lst4list<int>lst5(lst2.begin(),lst2.end()); //同lst4//list常用操作函数Lst1.assign() 给list赋值Lst1.back() 返回最后一个元素Lst1.begin() 返回指向第一个元素的迭代器Lst1.clear() 删除所有元素Lst1.empty() 如果list是空的则返回trueLst1.end() 返回末尾的迭代器Lst1.erase() 删除一个元素Lst1.front() 返回第一个元素Lst1.get_allocator() 返回list的配置器Lst1.insert() 插入一个元素到list中Lst1.max_size() 返回list能容纳的最大元素数量Lst1.merge() 合并两个listLst1.pop_back() 删除最后一个元素Lst1.pop_front() 删除第一个元素Lst1.push_back() 在list的末尾添加一个元素Lst1.push_front() 在list的头部添加一个元素Lst1.rbegin() 返回指向第一个元素的逆向迭代器Lst1.remove() 从list删除元素Lst1.remove_if() 按指定条件删除元素Lst1.rend() 指向list末尾的逆向迭代器Lst1.resize() 改变list的大小Lst1.reverse() 把list的元素倒转Lst1.size() 返回list中的元素个数Lst1.sort() 给list排序Lst1.splice() 合并两个listLst1.swap() 交换两个listLst1.unique() 删除list中相邻重复的元素
vector
1.push_back 在数组的最后添加一个数据2.pop_back 去掉数组的最后一个数据3.at 得到编号位置的数据4.begin 得到数组头的指针5.end 得到数组的最后一个单元+1的指针6.front 得到数组头的引用7.back 得到数组的最后一个单元的引用8.max_size 得到vector最大可以是多大9.capacity 当前vector分配的大小10.size 当前使用数据的大小11.resize 改变当前使用数据的大小,如果它比当前使用的大,者填充默认值12.reserve 改变当前vecotr所分配空间的大小13.erase 删除指针指向的数据项14.clear 清空当前的vector15.rbegin 将vector反转后的开始指针返回(其实就是原来的end-1)16.rend 将vector反转构的结束指针返回(其实就是原来的begin-1)17.empty 判断vector是否为空18.swap 与另一个vector交换数据
map
map
map.find(key);//返回一个地址,可以用迭代器接收
mp[key] = value// 插入数据
iterator it= map.find(key);
map.count(key) // 统计key出现的次数,结果为0或者1
it.first为key
it.second为value
map<int ,string>maplive;// 添加数据maplive.insert(pair<int,string>(102,"aclive"));maplive.insert(map<int,string>::value_type(321,"hai"));maplive[112]="April";//map中最简单最常用的插入添加!//元素的查找map<int ,string >::iteratorl_it;// 当key为x时l_it=maplive.find(x);//返回的是一个指针if(l_it==maplive.end())cout<<"we do not find x"<<endl;elsecout<<"wo find x"<<endl;map<string,string>m;if(m[x]=="")cout<<"we do not find x"<<endl;//元素的删除map<int ,string>::iterator l_it;;l_it =maplive.find(112);if( l_it == maplive.end())cout<<"we do not find112"<<endl;elsemaplive.erase(l_it);//delete 112;
unordered_map:
优点: 因为内部实现了哈希表,因此其查找速度非常的快
缺点: 哈希表的建立比较耗费时间
适用处:对于查找问题,unordered_map会更加高效一些,因此遇到查找问题,常会考虑一下用unordered_map
set
在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序。set中元素的值不能直接被改变。set内部采用的是一种非常高效的平衡检索二叉树:红黑树,也称为RB树(Red-Black Tree)。RB树的统计性能要好于一般平衡二叉树。
begin(); // 返回指向第一个元素的迭代器end(); // 返回指向迭代器的最末尾处(即最后一个元素的下一个位置)clear(); // 清除所有元素count(); // 返回某个值元素的个数empty(); // 如果集合为空,返回trueequal_range(); //返回集合中与给定值相等的上下限的两个迭代器erase()–删除集合中的元素find()–返回一个指向被查找到元素的迭代器get_allocator()–返回集合的分配器insert()–在集合中插入元素lower_bound()–返回指向大于(或等于)某值的第一个元素的迭代器key_comp()–返回一个用于元素间值比较的函数max_size()–返回集合能容纳的元素的最大限值rbegin()–返回指向集合中最后一个元素的反向迭代器rend()–返回指向集合中第一个元素的反向迭代器size()–集合中元素的数目swap()–交换两个集合变量upper_bound()–返回大于某个值元素的迭代器value_comp()–返回一个用于比较元素间的值的函数
