C++常用函数

lower_bound(arr, arr + arr.size(), val)

返回一个迭代器,返回指向大于等于val的第一个值的位置

lower_bound(arr, arr + arr.size(), val) - arr

可以得到大于等于val数值的数组下标

//升序队列,小顶堆 priority_queue <int,vector,greater > q;

//降序队列,大顶堆 priority_queue <int,vector,less >q;

std::to_string(num) 将数字转换成string

1
2
3
4
5
isalpha(a);//是否为字母a
isdigit(1);//是否为数字1
isupper(A);//是否为大写字母A
islower();//是否为大写字母A
_builtin_popcount(int x) 返回数字二进制下1的数目

数组初始化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
int sum[100] = {0}; // 只能初始化为0
memset(sum, 0, sizeof(sum));
// 按字节赋值,通常用来赋值0或-1
fill(sum, sum + sum.size(), 0);
// fill按单元赋值,将一个区间元素赋相同的值

vector<int> nums(17);
//初始化设置nums有17个元素,此时nums.push(123)从17个元素后面加
vector<int> nums(17, 3);
//初始化设置nums有17个值为3的元素
vector<int> nums(sum);
// 将数组sum的元素复制到nums中
vector<int> n2(nums.begin(), nums.end());
// 将动态数组nums的元素复制到n2中
fill(nums.begin(), nums.end(), 3)
// 将动态数组nums中元素值全设为3
nums.insert(nums.begin() + i, k)
// 在动态数组nums的第i个元素前插入k
nums.insert(nums.begin() + i, k, val)
// 在动态数组nums的第i个元素前插入k个值为val的元素
nums.insert(nums.end(), val)
// 在动态数组nums末尾插入val
reverse(nums.begin(), nums.end())
// 反转动态数组

accumulate()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<iostream>
#include<numeric>//accumulate函数在这个库中定义
#include<string>//包含这个库,可以直接输出字符串
#include<vector>//vector是向量类型,可容纳许多类型的数据,因此也被称为容器
using namespace std;
int main() {
//功能一:求和
int list[10] = { 1,2,3,4,5,6,7,8,9,10 };
int sum= accumulate(list, list+10, 0) ;
cout <<"和:"<<sum<<endl;
//功能二:求连乘积
int con_product = accumulate(list, list + 3, 1, multiplies<int>());
cout<<"连乘积:"<<con_product<<endl;
//功能三:string合并
vector<string>a{"1","-2345","+6"};
string a_sum=accumulate(a.begin(), a.end(),string("out: "));
cout<<"string合并后输出:"<<a_sum<<endl;
return 0;
}

求和时,accumulate带有三个形参:累加的元素起始地址;累加的元素结束地址,累加的初值(通常为0)。例如:
sum= accumulate(list, list+10, 0) ;得出sum=55.
如果sum= accumulate(list, list+3, 0) ;得出sum=6.
如果sum= accumulate(list, list+3, 100) ;得出sum=106.

求连乘积时,accumulate带有四个形参:连乘的元素起始地址;连乘的元素结束地址,连乘的初值(通常为1)。例如:
con_product= accumulate(list, list+3, 1, multiplies()) ;得出sum=6.
如果con_product= accumulate(list, list+3, 10, multiplies()) ;得出sum=60.
求string合并,
string a_sum=accumulate(a.begin(), a.end(),string(“out: “));得到out: 1-2345+6