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

2014-11-24 08:21:27 · 作者: · 浏览: 4
econd contains: 0 2 0 4 0 6 0 8 0

replace_if

将一个范围中值满足给定条件的元素赋值为新的值

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

bool IsOdd (int i) { return ((i%2)==1); }

int main () {
std::vector myvector;

// set some values:
for (int i=1; i<10; i++) myvector.push_back(i); // 1 2 3 4 5 6 7 8 9

std::replace_if (myvector.begin(), myvector.end(), IsOdd, 0); // 0 2 0 4 0 6 0 8 0

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: 0 2 0 4 0 6 0 8 0

reverse

反转排序指定范围中的元素

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

int main () {
std::vector myvector;

// set some values:
for (int i=1; i<10; ++i) myvector.push_back(i); // 1 2 3 4 5 6 7 8 9

std::reverse(myvector.begin(),myvector.end()); // 9 8 7 6 5 4 3 2 1

// print out content:
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: 9 8 7 6 5 4 3 2 1

reverse_copy

拷贝指定范围的反转排序结果

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

int main () {
int myints[] ={1,2,3,4,5,6,7,8,9};
std::vector myvector;

myvector.resize(9); // allocate space

std::reverse_copy (myints, myints+9, myvector.begin());

// print out content:
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: 9 8 7 6 5 4 3 2 1

rotate

循环移动指定范围中的元素

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

int main () {
std::vector myvector;

// set some values:
for (int i=1; i<10; ++i) myvector.push_back(i); // 1 2 3 4 5 6 7 8 9

std::rotate(myvector.begin(),myvector.begin()+3,myvector.end());
// 4 5 6 7 8 9 1 2 3
// print out content:
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: 4 5 6 7 8 9 1 2 3

rotate_copy

拷贝指定范围的循环移动结果

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

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

std::vector myvector (7);

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

// print out content:
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: 40 50 60 70 10 20 30

shuffle

用指定的随机数引擎随机打乱指定范围中的元素的位置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// shuffle algorithm example
#include // std::cout
#include // std::move_backward
#include // std::array
#include // std::default_random_engine
#include // std::chrono::system_clock

int main () {
std::array foo {1,2,3,4,5};

// obtain a time-based seed:
unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();