C++中一些有用的小函数总结


前言

在刷Leetcode的过程中,发现使用一些小函数,能够大幅度提高coding效率,现总结如下。


一、计算类

1. accumulate

累加函数。括号中第一个参数为vector的起始地址,第二个为结束地址,第三个为初始值。

int sum = accumulate(vec.begin(), vec.end(), 1);

该函数的头文件在numeric中。

2. count

统计函数。括号中第一个参数为vector的起始地址,第二个为结束地址,第三个为需要统计的值。

int ct = count(vec.begin(), vec.end(), 1);

该函数的头文件在algorithm中。

3. log10

对数函数。括号中参数为以10为底的对数。通过该函数可以表示以任何数为底数的对数函数,比如以3为底的对数函数如下所示:

int value = log10(27) / log10(3);

该函数的头文件在cmath中。

4. fmod

针对double的取余函数。括号中第一个参数为被除数,第二个参数为除数。这个函数可以用来判断一个数是不是正整数,如下所示:

fmod(21,1) == 0 ?

该函数的头文件在math.h中。

5. sqrt

开根号函数,如下所示:

sqrt(100)

该函数的头文件在math.h中。

6. iota

让vector里面的元素从小到大赋值,如下所示:

vector<int> a(4, 0);
iota(a.begin(), a.end(), 10); // 从10开始赋值
for (int i: a) cout << i << endl;
// 输出
// 10
// 11
// 12
// 13

7. vector求前缀和

vector<int> a{1, 3, 6}, b(3);
partial_sum(a.begin(), a.end(), b.begin());
for (int i: b) cout << i << endl;
// 输出
// 1
// 4
// 10

8.截取vector

以截取前2个和后两个为例:

vector<int> a{-10, -8, 0, 8, 10};
vector<int> f2(a.begin(), a.begin() + 2);
vector<int> r2(a.end() - 2, a.end());
// f2 = {-10, 8}
// r2 = {8, 10}

二、转换类

to_string

将其他类型的值转换成string

int a = 99;
string b = to_string(a);

二、查找类

find

在一个string中查找有没有某char或者string

string a = "abcd";
string fb = "b";
char fc = 'c';
char fn = 'n';
string::size_type idx;
idx = a.find(fb);
cout << idx << endl; // 输出1
idx = a.find(fc);
cout << idx << endl; // 输出2
idx = a.find(fn); // 此时 idx == string::npos

三、排序类

sort

以对vector排序为例,比如我们定义按vector第3位,从小到大排序,那么需要先定义如下的比较函数:

bool comp (vector<int> a, vector<int> b) {
	return a[2] < b[2];
}

然后再在主函数中进行调用,格式如下:

vector<vector<int>> a{{0, 2, 5, 3}, {5, 9, 3, 1}, {0, 10, 7}};
sort(a.begin(), a.end(), comp);
for_each(a.begin(), a.end(), [](vector<int> x){
	for (int i = 0; i < x.size(); ++i) {
		cout << x[i] << " ";
	}
	cout << endl;
});

得到输出结果如下:

5 9 3 1 
0 2 5 3 
0 10 7 

其实不知对于vector,对于其他数据类型,只要定义好comp,就可以进行相应的排序。

三、判断类

isalpha isspace isdigit ispunct

char a = 'b';
isalpha(a);  // 返回非0值
isspace(a);  // 返回0 
isdigit(a);  // 返回0 
ispunct(a);  // 返回0 

四、输出类

setprecision

double a = 1.2345;
cout << setprecision(2) << fixed << a;  // 输出1.23,保留了2位小数

五.字符串比较

char s1[] = "abc", s2[] = "abd";
cout << strcmp(s1, s2);
char* s3 = "ab", *s4 = "aa";
cout << strcmp(s3, s4);
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值