STL中的nth_element()方法的使用 通过调用nth_element(start, start+n, end) 方法可以使第n大元素处于第n位置(从0开始,其位置是下标为 n的元素),并且比这个元素小的元素都排在这个元素之前,比这个元素大的元素都排在这个元素之后,但不能保证他们是有序的,下面是这个方法的具体使用方法.
1 #include <iostream>
2
3 #include <algorithm>
4
5 #include <functional>
6
7 #include <vector>
8
9 using namespace std;
10
11
12
13 int main()
14
15 {
16
17 const int VECTOR_SIZE = 50 ;
18
19
20
21 vector<int> Numbers(VECTOR_SIZE) ;
22
23
24
25 vector<int>::iterator start, end, it ;
26
27
28
29 // Initialize vector Numbers
30
31 for(int i=0;i<50;++i){
32
33 Numbers[i]=i;
34
35 }
36
37 /*由于赋值时是有序的,下面random_shuffle()方法将这些数据的顺序打乱*/
38
39 random_shuffle(Numbers.begin(),Numbers.end());
40
41
42
43 // location of first element of Numbers
44
45 start = Numbers.begin() ;
46
47
48
49 // one past the location last element of Numbers
50
51 end = Numbers.end() ;
52
53
54
55 cout << "Before calling nth_element/n" << endl ;
56
57
58
59 // print content of Numbers
60
61 cout << "Numbers { " ;
62
63 for(it = start; it != end; it++)
64
65 cout << *it << " " ;
66
67 cout << " }/n" << endl ;
68
69
70
71 /*
72
73 * partition the elements by the 8th element,
74
75 *(notice that 0th is the first element)
76
77 */
78
79 nth_element(start, start+8, end) ;
80
81
82
83 cout << "After calling nth_element/n" << endl ;
84
85
86
87 cout << "Numbers { " ;
88
89 for(it = start; it != end; it++)
90
91 cout << *it << " " ;
92
93 cout << " }/n" << endl ;
94
95 system("pause");
96
97 }