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

2014-11-24 08:21:27 · 作者: · 浏览: 2
rator it = myvector.begin(); it!=myvector.end(); ++it)
std::cout << ' ' << *it;

std::cout << ' ';

return 0;
}

输出:

1 myvector contains: 10 20 30 40 50 60 70

fill

将一个范围的元素赋值为给定值

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

int main () {
std::vector myvector (8); // myvector: 0 0 0 0 0 0 0 0

std::fill (myvector.begin(),myvector.begin()+4,5); // myvector: 5 5 5 5 0 0 0 0
std::fill (myvector.begin()+3,myvector.end()-2,8); // myvector: 5 5 5 8 8 8 0 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: 5 5 5 8 8 8 0 0

fill_n

将某个位置开始的 n 个元素赋值为给定值

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

int main () {
std::vector myvector (8,10); // myvector: 10 10 10 10 10 10 10 10

std::fill_n (myvector.begin(),4,20); // myvector: 20 20 20 20 10 10 10 10
std::fill_n (myvector.begin()+3,3,33); // myvector: 20 20 20 33 33 33 10 10

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: 20 20 20 33 33 33 10 10

generate

将一个函数的执行结果保存到指定范围的元素中,用于批量赋值范围中的元素

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
37
38
// generate algorithm example
#include // std::cout
#include // std::generate
#include // std::vector
#include // std::time
#include // std::rand, std::srand

// function generator:
int RandomNumber () { return (std::rand()%100); }

// class generator:
struct c_unique {
int current;
c_unique() {current=0;}
int operator()() {return ++current;}
} UniqueNumber;

int main () {
std::srand ( unsigned ( std::time(0) ) );

std::vector myvector (8);

generate (myvector.begin(), myvector.end(), RandomNumber);

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

std::generate (myvector.begin(), myvector.end(), UniqueNumber);

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

return 0;
}

输出:

1
2
myvector contains: 57 87 76 66 85 54 17 15
myvector contains: 1 2 3 4 5 6 7 8

generate_n

将一个函数的执行结果保存到指定位置开始的 n 个元素中

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

int current = 0;
int UniqueNumber () { return ++current; }

int main () {
int myarray[9];

std::generate_n (myarray, 9, UniqueNumber);

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

return 0;
}

输出:

1 myarray contains: 1 2 3 4 5 6 7 8 9

iter_swap

交换两个迭代器指向的元素

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

int main () {

int myints[]={10,20,30,40,50 }; // myints: 10 20 30 40 50
std::vector myvector (4,99); // myvector: 99 99 99 99

std::iter_swap(myints,myvector.begin()); // myints: [99] 20 30 40 50
// myvector: [10] 99 99 99

std::iter_swap(myints+3,myvector.begin()+2); // myints: 99 20 3