C++函数

vector

vector<vector<int>> ans;
//插入一个vector
ans.push_back({1,2,3,4});

pair

vector<pair<int, int> > vec;
vec.push_back(make_pair(1, 2));
cout<<vec[0].first<<endl;

map

map<string, int>mp;    //创建map
mp.insert(pair<string, int>(a, b))    //向mp中插入值为a,b的键
mp.find()    //返回所在位置的迭代器,如果找不到则返回mp.end()

小数

cout<<fixed<<setprecision(2)<<res<<endl;    //在输出时固定小数的位数
round(x)    //四舍五入取整数

优先队列

priority_queue<int>q; //大顶堆
priority_queue<int, vector<int>, less<int> > que; //小顶堆

//自定义结构体的排序规则
struct node{
	int x, y;
	friend bool operator < (node a, node b){
		return a.y < b.y ;
	}
};
priority_queue<node> que;

q.push(a);
q.pop();

二分查找

//lower_bound返回所在值的位置,如果存在相同值,则返回第一个出现的位置
//upper_bound返回所在值的后一个位置,如果存在相同值,返回最后一次出现位置的后面
//如果所查找值不存在,则两个函数都返回最接近的比target小的数的后面位置。
//对于[2, 4, 5]. 当target为4时, st为1, ed为2. 当target为3时,st和ed都为2.
//两个函数都返回物理位置,所以要减去起始地址。

int st = lower_bound(nums.begin(), nums.end(), target) - nums.begin();
int ed = upper_bound(nums.begin(), nums.end(), target) - nums.begin();

全排列

//next_permutation只能获得下一个排列,如果要获得全排列,那么就需要先对数组进行升序排序
vector<int> vec;
next_permutation(vec.begin(), vec.end());
int a[10];
next_permutation(a, a + 10);

set和multiset

//插入
s.insert(element);

//multiset和set用法一样,但前者会保存重复元素
//遍历
    set<int>::iterator it;
	for (it = s.begin(); it !=s.end();it++)
	{
		cout << "element:" << *it << endl;
	}

//set对vector去重
vector<vector<int>> ans;
sort(nums.begin(), nums.end());
set<vector<int>> st;
do{
    st.insert(nums);
}while(next_permutation(nums.begin(), nums.end()));
set<vector<int>>::iterator it;
for(it = st.begin(); it != st.end(); it++){
    ans.push_back(*it);
}

set和vector互相转化

vector<int> v;
v = {1,2,2,3,3,4};//建立vector
set<int> st(v.begin(), v.end());//在构造函数中可以直接实现vector转set
v.assign(st.begin(), st.end());//用assign实现set转vector

int和string互相转化

// int to string
int a = 13245;
string s = to_string(a);

//string to int
string s = "123456";
int b = atoi(s.c_str());

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值