目录
4、to_string(int / double) 将十进制类型 int、double 等转化为string
一、set
set是一种有序的容器
unordered_set是一种无序的容器
set<int> s; //以int型为例 默认按键值升序
set<int,greater<int>> p; //降序排列
int x;
s.insert(x); //将x插入s中
s.erase(x); //删除s中的x元素,返回0或1,0表示set中不存在x
s.clear(); //清空s
s.empty(); //判断s是否为空,若是返回1,否则返回0
s.size(); //返回s中元素的个数
s.count(x); //是否存在x 0为不存在 1为存在
s.find(x); //在s中查找x,返回x的迭代器,若x不存在,则返回指向q尾部的迭代器即 q.end()
s.lower_bound(x); //返回一个迭代器,指向最后一个小于x的元素
s.upper_bound(x); //返回一个迭代器,指向第一个大于x的元素
//要取值时 *s.upper_bound();
s.begin(); //返回指向s中第一个元素的迭代器
s.rbegin(); //返回最后一个元素的迭代器
s.rend(); //返回第一个元素的的前一个元素迭代器
s.end(); //返回指向s最后一个元素下一个位置的迭代器
//要取值时 *s.rbegin();
二、map
map是一种有序的容器
unordered_map是一种无序的容器
map<int,int> mp;
map<string,int>mp;
mp.insert({key,value});
mp.erase(key);
mp.size();
mp.clear();
mp.empty();
mp.count(); //返回指定元素出现的次数 因为key值不会重复 所以只能是 1 or 0
mp.find(); //找到值时返回对应下标的迭代器,否则返回mp.end()
//map的遍历
//方法一:for-auto法
for(auto x:mp)
cout<<x.first<<" "<<x.second;
//方法二:迭代器法
map<string,int>::iterator it;
for(it = maps.begin(); it != maps.end(); it++)
cout<<it->first<<' '<<it->second<<endl; //输出的是key value值
{{1,12},{2,15},{3,18},{4,22}};
//通过key值找value值
cout<<mp[1];
Output: 12
//通过value值找key值
map<int,int>mp={{1,2},{3,4}};
for(auto x:mp)
if(x.second==2) cout<<x.first;
Output: 1
mp.find()实例
mp.find(x) != mp.end() 说明在map中已查找到元素x
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int n=nums.size();
map<int,int> mp;
for(int i=0;i<n;i++)
{
int t=target-nums[i];
if(mp.find(t)!=mp.end())
return {i,mp.find(t)->second};
mp[nums[i]]=i;
}
return{};
}
};
三、字符串
string s;
s.size();
cin>>s; //遇到空格和回车会截止
getline(cin,s); //遇到空格不会截止 遇到回车会截止
cin.get();
getchar(); //接收回车 接受空白字符
1、查找函数 find rfind
s.find(str,idx);
//返回该子串出现的下标
//第二个参数为开始查找的位置(下标)如果不指明,则从第0个字符开始查找
//如果找不到返回-1
s="aa bb cc";
str="bb";
cout<<s.find(str);
//输出:3
s.rfind(str);
//用于从后往前查找字符串 如果查找到,则返回子串最后一次出现的位置,否则,返回 npos
2、分割字符串 substr
s.substr(pos,len);
//从下标pos开始 截取长度为len的字符串
s.substr(pos);
//从下标pos开始 截到末尾
3、stoi(string) 将字符串转化为整数
stoi(string); //将字符串转化为十进制 int 类型
4、to_string(int / double) 将十进制类型 int、double 等转化为string
string res=to_string(int);
5、stringstream流 - 相当于分隔单词
string s = "ABCD";
stringstream ss(s);
char ch;
while(ss>>ch) cout << ch << " ";
//运行结果
//A B C D
string s = "hello world";
stringstream ss(s);
string str;
while(ss>>str) cout << str << " ";
//运行结果
//hello world
四、vector
1、一维vector
//初始化
vector<int> v1;
vector<float> v2(3); //初始化有3个元素的vector容器
vector<char> v3(3,'a');
vector<char> v4(v3);
vector<int> res{0,0x3f3f3f3f};
//初始化
iota(v.begin(),v.end(),0); //把v中所有元素置为0
//末尾添加元素
v.push_back(1);
//末尾删除元素
v.pop_back();
//插入元素
v.insert(v.begin()+i,a); //在第i+1个元素前面插入a
//删除指定元素
v.erase(v.begin()+2); //删除第3个元素
//判空
v.empty();
//清空
v.clear();
//vector元素大小
v.size();
//vector比较
if(v1==v2)
//返回最后一个元素
[1,2,3,4,5]
cout<<v.back()<<endl;
Output: 5
//返回第一个元素
[1,2,3,4,5]
cout<<v.front()<<endl;
Output: 1
//反转vector
reverse(v.begin(),v.end());
//sort排序
sort(v.begin(),v.end(),cmp); //加cmp就是降序 不加就是升序
bool cmp(const int &a,const int &b)
{
return a>b;
}
*max_element(v.begin(),v.end()); //返回容器中最大值
*min_element(v.begin(),v.end()); //返回容器中最小值
2、二维vector
vector<vector<int>> v;
v.resize(n+1); //固定v的行数
v[i].push_back();
五、stack
//初始化
stack<int> stk;
//入栈
stk.push(x);
//出栈
stk.pop();
//取栈顶元素
stk.top();
//判空
stk.empty();
//栈中元素
stk.size();
六、queue
//初始化
queue<int> q;
//入队
q.push(x);
q.emplace(x);
//出队
q.pop(); //删除队首元素
//返回队首元素
q.front();
//返回队尾元素
q.back();
//队中元素个数
q.size();
//判空
q.empty();
七、优先队列priority_queue
decltype
被称作类型说明符,它的作用是选择并返回操作数的数据类型
//升序队列,小顶堆
priority_queue <int,vector<int>,greater<int>> q;
auto cmp=[](ListNode* a,ListNode* b) {return a->val > b->val;};
priority_queue<ListNode*,vector<ListNode*>,decltype(cmp)> pq;
//默认 降序队列,大顶堆
priority_queue <int> q;
//入队
q.push();
q.emplace();
//删除堆顶元素
q.pop();
//返回堆顶元素
q.top();
//大小
q.size();
//判空
q.empty();
//交换两个堆中元素
q.swap(p);
八、数学
1、ceil向上取整
向上取整公式 (a+b-1)/ b
ceil(1.0*a/b);
九、数组
使用memset()函数初始化二维数组时的注意事项_hnjzsyjyj的博客-CSDN博客_memset二维数组
memset(a,0,sizeof(a));