【C++常用】set + map + vector + stack + queue + 优先队列 + 数学 + 字符串

目录

一、set

二、map

三、字符串

1、查找函数 find rfind

2、分割字符串 substr

3、stoi(string) 将字符串转化为整数 

4、to_string(int / double)  将十进制类型 int、double 等转化为string

5、stringstream流 - 相当于分隔单词

四、vector

1、一维vector

2、二维vector 

五、stack

六、queue

七、优先队列priority_queue

八、数学

1、ceil向上取整


一、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));

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值