一些函数
1. sort
sort函数用于对数组或容器进行排序,默认是升序排序。
用法:
sort(begin, end)
:对数组或容器的指定区间进行排序。
sort(begin, end, cmp)
:对数组或容器的指定区间进行排序,使用自定义的比较函数cmp。
参数说明:
begin
:指向数组或容器的第一个元素的指针。end
: 指向数组或容器的最后一个元素的下一个位置的指针。cmp
:自定义的比较函数。
假设是给一个大小为n的数组arr升序(从小到大)排序,那么调用sort函数的方式如下:
sort(arr, arr + n);
如果是反过来,降序(从大到小)排序,那么调用sort函数的方式如下:
sort(arr, arr + n, greater<int>())
其中的greater<int>()
是C++标准库中的一个函数对象,表示从大到小排序。
或者也可以自定义一个比较函数,如下所示:
bool cmp(int a, int b)
{
return a > b; // 降序排序,反之为升序排序
}
然后调用sort函数的方式如下:
sort(arr, arr + n, cmp);
sort示例:
最简单的用法是对数组或容器进行排序,如下所示:
int main()
{
int a[] = {3, 1, 2}; // 创建一个整型数组a
sort(a, a + 3); // 对数组a进行排序
for (int i = 0; i < 3; i++) // 遍历数组a
{
cout << a[i] << " "; // 输出数组a的元素
}
cout << endl;
return 0;
}
排序后的输出结果为:
1 2 3
对于容器,也可以使用sort函数进行排序,如下所示:
int main()
{
vector<int> v = {3, 1, 2}; // 创建一个整型动态数组对象v
sort(v.begin(), v.end()); // 对数组v进行排序
for (int i = 0; i < 3; i++) // 遍历数组v
{
cout << v[i] << " "; // 输出数组v的元素
}
cout << endl;
return 0;
}
reverse
reverse函数用于对数组或容器进行逆序操作。
蓝桥杯250题:反转字符串中的字符
用法:
reverse(begin, end)
:对数组或容器的指定区间进行逆序操作。
参数说明:
begin
:指向数组或容器的第一个元素的指针。end
: 指向数组或容器的最后一个元素的下一个位置的指针。
2.reverse示例:
对数组或容器进行逆序操作,如下所示:
int main()
{
int a[] = {1, 2, 3}; // 创建一个整型数组a
reverse(a, a + 3); // 对数组a进行逆序操作
for (int i = 0; i < 3; i++) // 遍历数组a
{
cout << a[i] << " "; // 输出数组a的元素
}
cout << endl;
return 0;
}
对容器进行逆序操作,如下所示:
int main()
{
vector<int> v = {1, 2, 3}; // 创建一个整型动态数组对象v
reverse(v.begin(), v.end()); // 对数组v进行逆序操作
for (int i = 0; i < 3; i++) // 遍历数组v
{
cout << v[i] << " "; // 输出数组v的元素
}
cout << endl;
return 0;
}
3.to_string
to_string函数用于将整数转换为字符串。
蓝桥杯191题:特别数的和
4.swap
swap函数用于交换两个变量的值。
用法:
swap(a, b)
:交换变量a和b的值。
参数说明:
a
:变量a。b
: 变量b。
swap示例:
交换两个变量的值,如下所示:
int main()
{
int a = 1, b = 2; // 创建两个整型变量a和b
swap(a, b); // 交换变量a和b的值
cout << a << " " << b << endl; // 输出变量a和b的值
return 0;
}
swap交换容器或数组的示例:
交换两个容器或数组的值,如下所示:
int main()
{
vector<int> v1 = {1, 2, 3}; // 创建一个整型动态数组对象v1
vector<int> v2 = {4, 5, 6}; // 创建一个整型动态数组对象v2
swap(v1, v2); // 交换数组v1和v2的值
for (int i = 0; i < 3; i++) // 遍历数组v1
{
cout << v1[i] << " "; // 输出数组v1的元素
}
cout << endl;
for (int i = 0; i < 3; i++) // 遍历数组v2
{
cout << v2[i] << " "; // 输出数组v2的元素
}
cout << endl;
return 0;
}
输出结果为:
4 5 6
1 2 3
交换容器元素的值:
以string为例,交换string中两个位置的元素,如下所示:
int main()
{
string s = "hello"; // 创建一个字符串对象s
swap(s[0], s[4]); // 交换字符串s中位置0和位置4的元素
cout << s << endl; // 输出字符串s
return 0;
}
输出结果为:
oellh
5.accumulate
accumulate函数用于计算数组或容器中元素的和。
6.find
find函数用于查找数组或容器中的元素。
用法:
find(begin, end, value)
:查找数组或容器的指定区间中是否存在值为value的元素。
参数说明:
begin
:指向数组或容器的第一个元素的指针。end
: 指向数组或容器的最后一个元素的下一个位置的指针。value
:要查找的元素的值。
find示例:
查找数组中的元素,如下所示:
int main()
{
int a[] = {1, 2, 3}; // 创建一个整型数组a
int* p = find(a, a + 3, 2); // 查找数组a中是否存在值为2的元素
if (p != a + 3) // 如果找到了元素2
{
cout << "found" << endl; // 输出"found"
}
else // 如果没有找到元素2
{
cout << "not found" << endl; // 输出"not found"
}
return 0;
}
查找容器中的元素,如下所示:
int main()
{
vector<int> v = {1, 2, 3}; // 创建一个整型动态数组对象v
vector<int>::iterator it = find(v.begin(), v.end(), 2); // 查找数组v中是否存在值为2的元素
if (it != v.end()) // 如果找到了元素2
{
cout << "found" << endl; // 输出"found"
}
else // 如果没有找到元素2
{
cout << "not found" << endl; // 输出"not found"
}
return 0;
}
7.容器中的find函数
对于容器,也可以使用容器自带的find函数进行查找,如下所示:
int main()
{
vector<int> v = {1, 2, 3}; // 创建一个整型动态数组对象v
int index = v.find(2); // 查找数组v中是否存在值为2的元素
cout << index << endl; // 输出元素2的索引
return 0;
}
输出结果为:
1
8.count
count函数用于统计数组或容器中某个元素的个数。
9.getline
getline函数用于从输入流中读取一行字符串。
用法:
getline(cin, str)
:从标准输入流cin中读取一行字符串到字符串对象str中。
参数说明:
cin
:标准输入流。str
: 字符串对象。
getline示例:
从标准输入流中读取一行字符串,如下所示:
int main()
{
string s; // 创建一个字符串对象s
getline(cin, s); // 从标准输入流中读取一行字符串到字符串对象s中
cout << s << endl; // 输出字符串s
return 0;
}
10.abs/fabs
abs函数用于计算整数的绝对值,fabs函数用于计算浮点数的绝对值。
用法:
abs(x)
:计算整数x的绝对值。
fabs(x)
:计算浮点数x的绝对值。
字符串与数字之间的转换
1.字符串转数字
方法1:stoi
string s = "123";
int n = stoi(s); // 将字符串s转换为整数n
方法2:流操作符
string s = "123";
stringstream ss(s);
int n;
ss >> n; // 将字符串s转换为整数n
方法3:atoi
string s = "123";
int n = atoi(s.c_str()); // 将字符串s转换为整数n
方法4:逐位转换
string s = "123";
int n = 0;
for (int i = 0; i < s.length(); i++)
{
n = n * 10 + s[i] - '0';
}
2.数字转字符串
方法1:to_string
int n = 123;
string s = to_string(n); // 将整数n转换为字符串s
方法2:流操作符
int n = 123;
stringstream ss;
ss << n;
string s = ss.str(); // 将整数n转换为字符串s
方法3:sprintf
int n = 123;
char str[100];
sprintf(str, "%d", n);
string s = str; // 将整数n转换为字符串s
方法4:逐位转换
int n = 123;
string s = "";
while (n)
{
s = char(n % 10 + '0') + s;
n /= 10;
}
方法5:itoa(注意蓝桥杯中不能使用itoa)
int n = 123;
char str[100];
itoa(n, str, 10);
string s = str; // 将整数n转换为字符串s
关于atoi,itoa,stoi,to_string的区别
atoi和itoa是C语言中的函数,用于将字符串和整数相互转换。
所以在C++,尤其是蓝桥杯中,最好使用stoi和to_string来进行字符串和整数的转换,而非atoi和itoa。
stoi和to_string是C++中的函数,用于将字符串和整数相互转换。
这两个函数在蓝桥杯中都可以放心使用