本帖持续更新

algorithm库

全排列函数

next_permutation()

介绍

对于next_permutation函数,其函数原型为:

1
2
3
#include <algorithm>

bool next_permutation(iterator start,iterator end)

当当前序列不存在下一个排列时,函数返回false,否则返回true(字典升序)

prev_permutation()

介绍

next_permutation() 是按照字典升序的方式生成的排列。当我们想以降序的方式生成排列时,可以使用 prev_permutation()

示例

下一个排列的基准以当前容器的元素顺序为准

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
vector<char> arr;
int main()
{
arr.push_back('a');
arr.push_back('b');
arr.push_back('c');
do
{
for (vector<char>::iterator it = arr.begin(); it != arr.end(); it++)
{
cout << *it << " ";
}
cout << endl;
} while (next_permutation(arr.begin(), arr.end()));
return 0;
}

输出

1
2
3
4
5
6
a b c
a c b
b a c
b c a
c a b
c b a

reverse()

原型

1
2
#include <algorithm>
void reverse (BidirectionalIterator first, BidirectionalIterator last)

作用

reverse函数用于反转在[first,last)范围内的顺序(包括first指向的元素,不包括last指向的元素),reverse函数没有返回值

例子

1
2
string ans
reverse(ans.begin(), ans.end());

具体参看高精度模板

sstream库

定行不定列输入

解释

n为行数,每行有不止一个数字输入,所以用Getline得到一行数据,用空格分割

Getline有自动分割的同名函数,但输入流不能是键盘,所以我们需要用到istringstream,让Getline从isttringstream中得到数据

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int n;
cin >> n;
getchar(); //吃掉n后面的回车
for (int i = 1; i <= n; i++)
{
string s;
getline(cin, s); //getline会自动吃掉回车
istringstream iss(s);
string tmp;
while (getline(iss, tmp, ' '))
{
stringstream ss;
ss << tmp;
int a;
ss >> a;
arr.push_back(a);
}
}

int转string

1
2
3
4
#include<sstream>
stringstream s
s<<int
s>>string

string转int

1
2
3
4
#include<sstream>
stringstream s
s<<string
s>>int

2022年2月2日 0:11 记:这种C++风格的转换性能上弱于C风格的Atoi

string库

find_first_not_of()

语法

1
2
3
4
size_type find_first_not_of( const basic_string &str, size_type index = 0 );
size_type find_first_not_of( const char *str, size_type index = 0 );
size_type find_first_not_of( const char *str, size_type index, size_type num );
size_type find_first_not_of( char ch, size_type index = 0 );

介绍

在字符串中查找第一个与str中的字符都不匹配的字符,返回它的位置。搜索从index开始。如果没找到就返回string::nops
在字符串中查找第一个与str中的字符都不匹配的字符,返回它的位置。搜索从index开始,最多查找num个字符。如果没找到就返回string::nops
在字符串中查找第一个与ch不匹配的字符,返回它的位置。搜索从index开始。如果没找到就返回string::nops

例子

1
ans.find_first_not_of('0') 找到第一个不是0的位置

具体参看高精度模板

构造函数

使用string ans(数量, ‘0’)可以直接初始化asn为数量长,全部填充0