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

2014-11-24 08:21:27 · 作者: · 浏览: 7
0 [99]
// myvector: 10 99 [40] 99

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 99 40 99

move

将一个范围中的元素移动到新的位置处

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// move algorithm example
#include // std::cout
#include // std::move (ranges)
#include // std::move (objects)
#include // std::vector
#include // std::string

int main () {
std::vector foo = {air,water,fire,earth};
std::vector bar (4);

// moving ranges:
std::cout << Moving ranges... ;
std::move ( foo.begin(), foo.begin()+4, bar.begin() );

std::cout << foo contains << foo.size() << elements:;
std::cout << (each in an unspecified but valid state);
std::cout << ' ';

std::cout << bar contains << bar.size() << elements:;
for (std::string& x: bar) std::cout << [ << x << ];
std::cout << ' ';

// moving container:
std::cout << Moving container... ;
foo = std::move (bar);

std::cout << foo contains << foo.size() << elements:;
for (std::string& x: foo) std::cout << [ << x << ];
std::cout << ' ';

std::cout << bar is in an unspecified but valid state;
std::cout << ' ';

return 0;
}

输出:

1
2
3
4
5
6
Moving ranges...
foo contains 4 elements: (each in an unspecified but valid state)
bar contains 4 elements: [air] [water] [fire] [earth]
Moving container...
foo contains 4 elements: [air] [water] [fire] [earth]
bar is in an unspecified but valid state

move_backward

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

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

int main () {
std::string elems[10] = {air,water,fire,earth};

// insert new element at the beginning:
std::move_backward (elems,elems+4,elems+5);
elems[0]=ether;

std::cout << elems contains:;
for (int i=0; i<10; ++i)
std::cout << [ << elems[i] << ];
std::cout << ' ';

return 0;
}

输出:

1 elems contains: [ether] [air] [water] [fire] [earth] [] [] [] [] []

random_shuffle

随机打乱指定范围中的元素的位置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// random_shuffle example
#include // std::cout
#include // std::random_shuffle
#include // std::vector
#include // std::time
#include // std::rand, std::srand

// random generator function:
int myrandom (int i) { return std::rand()%i;}

int main () {
std::srand ( unsigned ( std::time(0) ) );
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

// using built-in random generator:
std::random_shuffle ( myvector.begin(), myvector.end() );

// using myrandom:
std::random_shuffle ( myvector.begin(), myvector.end(), myrandom);

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

remove

将一个范围中值等价于给定值的元素删除

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

int main () {
int myints[] = {10,20,30,30,20,10,10,20}; // 10 20 30 30 20 10 10 20

// bounds of range:
int* pbegin = myints; // ^
int* pend = myints+sizeof(myints)/sizeof(int); // ^ ^

pend = std::remove (pbegin, pend, 20); // 10 30 30 10 10
// ^ ^
std::cout << range contains:;
for (int* p=pbegin; p!=pend; ++p)
std::cout << ' ' << *p;
std::cout << ' ';

return 0;
}

输出:

1 range contains: 10 30 30 10 10

remove_if

将一个范围中值满足给定条件的元素删除

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