修正序列算法
修正序列算法的有些操作会改变容器的内容。例如,把一个容器的部分内容复制到同一个容器的另一个部分,或者用指定值填充容器。
函数 |
算法 |
copy(first, last, first2) |
复制 |
copy_backward(first, last, first2) |
逆向复制 |
fill(first, last, val) |
改填元素值 |
generate(first, last, func) |
以指定动作的运算结果填充特定范围内的元素 |
partition(first, last, pred) |
切割 |
random_shuffle(first, last) |
随机重排 |
remove(first, last, val) |
移除某种元素,但不删除 |
replace(first, last, val1, val2) |
取代某种元素 |
rotate(first, middle, last) |
旋转 |
reverse(first, last) |
颠倒元素次序 |
swap(it1, it2) |
置换 |
swap_ranges(first, last, first2) |
置换指定范围 |
transform(first, last, first2, func) |
以两个序列为基础,交互作用产生第 3 个序列 |
unique(first, last) |
将重复的元素折叠压缩,变成唯一的 |
fill(first, last, val)
把值 val 复制到迭代器 first 和 last 指明范围内的各个元素中。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void Test_fill()
{
vector<int> int_vector;
for (size_t i = 0; i < 10; i++) int_vector.push_back(i);
cout << "Vector:";
for (int item : int_vector) cout << item << ' ';
cout << endl;
fill(int_vector.begin(), int_vector.begin() + 5, 0);
cout << "Vector:";
for (int item : int_vector) cout << item << ' ';
cout << endl;
}
Output |
Vector:0 1 2 3 4 5 6 7 8 9 Vector:0 0 0 0 0 5 6 7 8 9 |
random_shuffle(first, last)
把迭代器 first 和 last 指明范围内的元素顺序随机打乱。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void Test_random_shuffle()
{
vector<int> int_vector;
for (size_t i = 0; i < 10; i++) int_vector.push_back(i);
cout << "Vector:";
for (int item : int_vector) cout << item << ' ';
cout << endl;
random_shuffle(int_vector.begin(), int_vector.end());
cout << "Vector:";
for (int item : int_vector) cout << item << ' ';
cout << endl;
}
Output |
Vector:0 1 2 3 4 5 6 7 8 9 Vector:8 1 9 2 0 5 7 3 4 6 |
partition(first, last, pred)
把一个容器划分成两部分,第 1 部分包含令谓词 pred 返回 true 值的元素,第 2 部分包含令谓词 pred 返回 false值的元素。函数返回的迭代器指向两部分的分界点元素。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool greater5(int value)
{
return value > 5;
}
void Test_partition()
{
vector<int> int_vector;
for (size_t i = 0; i < 10; i++) int_vector.push_back(i);
random_shuffle(int_vector.begin(), int_vector.end());
cout << "Vector:";
for (int item : int_vector) cout << item << ' ';
cout << endl;
partition(int_vector.begin(), int_vector.end(), greater5);
cout << "Vector:";
for (int item : int_vector) cout << item << ' ';
cout << endl;
}
Output |
Vector:8 1 9 2 0 5 7 3 4 6 Vector:8 6 9 7 0 5 2 3 4 1 |
rotate(first, middle, last)
把从 middle 到 last 范围内的元素做旋转运算,并放置到从 first 开始的子序列中。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void Test_rotate()
{
vector<int> int_vector;
for (size_t i = 0; i < 10; i++) int_vector.push_back(i);
cout << "Vector:";
for (int item : int_vector) cout << item << ' ';
cout << endl;
rotate(int_vector.begin(), int_vector.begin() + 5, int_vector.end());
cout << "Vector:";
for (int item : int_vector) cout << item << ' ';
cout << endl;
}
Output |
Vector:0 1 2 3 4 5 6 7 8 9 Vector:5 6 7 8 9 0 1 2 3 4 |
相关参考
微软文档(algorithm)
cppreference(algorithm)