C++ 算法库(2) 修改内容的序列操作(一)

2014-11-24 08:21:27 · 作者: · 浏览: 1
修改内容的序列操作:
copy 将一个范围中的元素拷贝到新的位置处
copy_backward 将一个范围中的元素按逆序拷贝到新的位置处
copy_if C++11 将一个范围中满足给定条件的元素拷贝到新的位置处
copy_n C++11 拷贝 n 个元素到新的位置处
fill 将一个范围的元素赋值为给定值
fill_n 将某个位置开始的 n 个元素赋值为给定值
generate 将一个函数的执行结果保存到指定范围的元素中,用于批量赋值范围中的元素
generate_n 将一个函数的执行结果保存到指定位置开始的 n 个元素中
iter_swap 交换两个迭代器指向的元素
move C++11 将一个范围中的元素移动到新的位置处
move_backward C++11 将一个范围中的元素按逆序移动到新的位置处
random_shuffle 随机打乱指定范围中的元素的位置
remove 将一个范围中值等价于给定值的元素删除
remove_if 将一个范围中值满足给定条件的元素删除
remove_copy 拷贝一个范围的元素,将其中值等价于给定值的元素删除
remove_copy_if 拷贝一个范围的元素,将其中值满足给定条件的元素删除
replace 将一个范围中值等价于给定值的元素赋值为新的值
replace_copy 拷贝一个范围的元素,将其中值等价于给定值的元素赋值为新的值
replace_copy_if 拷贝一个范围的元素,将其中值满足给定条件的元素赋值为新的值
replace_if 将一个范围中值满足给定条件的元素赋值为新的值
reverse 反转排序指定范围中的元素
reverse_copy 拷贝指定范围的反转排序结果
rotate 循环移动指定范围中的元素
rotate_copy 拷贝指定范围的循环移动结果
shuff le C++11 用指定的随机数引擎随机打乱指定范围中的元素的位置
swap 交换两个对象的值
swap_ranges 交换两个范围的元素
transform 对指定范围中的每个元素调用某个函数以改变元素的值
unique 删除指定范围中的所有连续重复元素,仅仅留下每组等值元素中的第一个元素
unique_copy 拷贝指定范围的唯一化(参考上述的 unique)结果

copy

将一个范围中的元素拷贝到新的位置处

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// copy algorithm example
#include // std::cout
#include // std::copy
#include // std::vector

int main () {
int myints[]={10,20,30,40,50,60,70};
std::vector myvector (7);

std::copy ( myints, myints+7, myvector.begin() );

std::cout << myvector contains:;
for (std::vector ::iterator it = myvector.begin(); it!=myvector.end(); ++it)
std::cout << ' ' << *it;

std::cout << ' ';

return 0;
}

输出:

1 myvector contains: 10 20 30 40 50 60 70

copy_backward

将一个范围中的元素按逆序拷贝到新的位置处

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// copy_backward example
#include // std::cout
#include // std::copy_backward
#include // std::vector

int main () {
std::vector myvector;

// set some values:
for (int i=1; i<=5; i++)
myvector.push_back(i*10); // myvector: 10 20 30 40 50

myvector.resize(myvector.size()+3); // allocate space for 3 more elements

std::copy_backward ( myvector.begin(), myvector.begin()+5, myvector.end() );

std::cout << myvector contains:;
for (std::vector ::iterator it=myvector.begin(); it!=myvector.end(); ++it)
std::cout << ' ' << *it;
std::cout << ' ';

return 0;
}

输出:

1 myvector contains: 10 20 30 10 20 30 40 50

copy_if

将一个范围中满足给定条件的元素拷贝到新的位置处

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// copy_if example
#include // std::cout
#include // std::copy_if, std::distance
#include // std::vector

int main () {
std::vector foo = {25,15,5,-5,-15};
std::vector bar (foo.size());

// copy only positive numbers:
auto it = std::copy_if (foo.begin(), foo.end(), bar.begin(), [](int i){return !(i<0);} );
bar.resize(std::distance(bar.begin(),it)); // shrink container to new size

std::cout << bar contains:;
for (int& x: bar) std::cout << ' ' << x;
std::cout << ' ';

return 0;
}

输出:

1 bar contains: 25 15 5

copy_n

拷贝 n 个元素到新的位置处

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// copy_n algorithm example
#include // std::cout
#include // std::copy
#include // std::vector

int main () {
int myints[]={10,20,30,40,50,60,70};
std::vector myvector;

myvector.resize(7); // allocate space for 7 elements

std::copy_n ( myints, 7, myvector.begin() );

std::cout << myvector contains:;
for (std::vector ::ite