每一个点开我的文章的小伙伴大家好!
在发这篇文章的时候,我是一名大二的学生,我将在博客记载我的学习之路!
这是我的第十三篇博客文章,这是关于C++的STL的文章,主要介绍一些竞赛常用的容器和STL函数
前言:最近更新文章比较少,因为我在学习后端开发的一些知识,比如说Spring、Springboot、Maven等基于JAVA语言的框架,学习了一些进阶算法,比如回溯算法、动态规划等算法思想。我打算开一个栏目专门讲讲算法思想和竞赛函数,希望如果有志同道合的C++友们能和我交流交流!
STL常用函数总结(欢迎补充):
- sort() :快速排序
sort(起始地址,末尾地址,cmp);
其中的cmp可以不写,默认按升序排列,也可以自己写一个bool类型的函数,实现自己想要的排序方式
其中降序的bool类型函数可以这么写:
bool cmp(int a,int b)
{
return a>b;
}
Sort常用于对数组和vector容器进行排列,至于什么是vector容器我以后的文章会介绍,大家也可以自己去找找资料了解了解。
#include<iostream>
#include<vector>
using namespace std;
bool cmp(int a,int b)
{
return a>b;
}
int main()
{
//sort(起始地址,末尾地址,cmp)
int b[10] = { 2,3,1,4,5,19,74,51,46,0 };
vector<int>va;
va.push_back(3);
va.push_back(2);
va.push_back(1);
va.push_back(4);
va.push_back(12);
va.push_back(33);
va.push_back(31);
va.push_back(13);
sort(b, b + 10,cmp);
for (int i=0;i<10;i++)
cout << b[i]<<" ";
cout << endl;
sort(va.begin(), va.end());
for (auto i : va)
cout << i <<" ";
cout << endl;
for (int i = 0; i < va.size(); i++)
cout << va[i] << " ";
}
运行结果:
2、reverse():逆置
reverse(起始地址,结束地址)
reverse常用于对数组和vector容器进行排列
就用上面的数组和容器为例:
reverse(b, b + 10);
for (int i = 0; i < 10; i++)
cout << b[i] << " ";
cout << endl;
reverse(va.begin(), va.end());
for (int i = 0; i < va.size(); i++)
cout << va[i] << " ";
3、is_sort()
is_sort(起始地址,末尾地址) 判断这个序列是不是升序的
函数返回一个bool类型的值 这里对数组b判断
if (is_sorted(b, b + 10))
cout << "该数组升序" << endl;
else cout << "该数组不为升序" << endl;
4、atoi(const char*) 将字符串转换为int类型
注意参数为char型数组,如果需要将string类型转换为int类型,可以使用stoi函数或者将string类型转换为const char *类型。
char a[] = "123456789";
string s = "1234567";
int c = atoi(a);
int d = atoi(s.c_str());
cout << "char数组转化为int型:" << c <<endl<<"string型转为int型:" << d << endl;
5、nth_element(beg,nth,end)
寻找序列第n小的值 nth为迭代器 执行这个函数之后,该序列会被由小到大排序
int g[7] = { 2,6,1,41,23,65,7 };
cout << "原来g数组中的顺序为:" << endl;
for (auto i : g)
cout << i << " ";
cout << endl;
nth_element(g, g + 2, g + 7);
cout << "g数组中第3小的元素为:" << g[2] << endl;
cout << "执行nth_element函数后的g数组顺序为:" << endl;
for (auto i : g)
cout << i << " ";
6、stoll()字符串转整型 long long int型 ,字符串内是数字
string str1 = "1231423214124";
auto n = stoll(str1);
cout << n<<endl;
7、stoi(str,起始位置,n进制) 将n进制的字符串转化为10进制
string str2 = "10011";
int s2 = stoi(str2,0,2);
cout << "字符串str2中的二进制内容转为十进制为:" << s2 << endl;
//按十进制转换为其他进制
cout << "300的八进制:" << oct << 300 << endl;
cout << "300的十进制:" << dec << 300 << endl;
cout << "300的十六进制:" << hex << 300 << endl;
cout << "300的二进制:" << bitset<8>(300) << endl; //<8>表示保留8位输出 一般用于事先知道转为2进制后的位数
8、_itoa()函数 将一个十进制数转换为2-36进制的字符串
格式 _itoa(num,str,m); num是一个int型的,是要转化的十进制数,str是转换的结果,m是目标进制
int num = 10;
char str3[100];
_itoa_s(num, str3, 2);
cout << "num转化为2进制后:" << str3 << endl;
今天就先分享这8个函数(明天考试,时间有限)
对下一期做个预告:
会接着分享stl函数,会介绍vector容器还有它的一些基本用法和进阶用法