Professional Documents
Culture Documents
Thư viện Algorithm
Thư viện Algorithm
all_of The following function tests a condition to all the elements of the range.
The following function tests a condition to some or any of the elements of the
any_of range
The following function checks if none of the elements follow the condition or
none_of not.
for_each The function applies an operation to all the elements of the range.
find The function finds a value in the range.
find_if The function finds for an element in the range.
The function finds an element in the range but in the opposite way as the above
find_if_not one.
find_end The function is used to return the last element of the range.
The function finds for the element that satisfies a condition and occurs at the
find_first_of first.
The function makes a search for finding the equal and adjacent elements in a
adjacent_find range.
count The function returns the count of a value in the range.
count_if The function returns the count of values that satisfies a condition.
mismatch The function returns the value in sequence which is the first mismatch.
equal The function is used to check if the two ranges have all elements equal.
The function checks whether the range in reference is a permutation of some
is_permutation other range.
search The function searches for the subsequence in a range.
search_n The function searches the range for the occurrence of an element.
copy The function copies the range of elements.
copy_n The function copies n elements of the range
copy_if The function copies the elements of the range if a certain condition is fulfilled.
copy_backward The function copies the elements in a backward order
move The function moves the ranges of elements.
move_backward The function moves the range of elements in the backward order
swap The function swaps the value of two objects.
swap_ranges The function swaps the value of two ranges.
iter_swap The function swaps the values of two iterators under reference.
transform The function transforms all the values in a range.
replace The function replaces the values in the range with a specific value.
replace_if The function replaces the value of the range if a certain condition is fulfilled.
replace_copy The function copies the range of values by replacing with an element.
The function copies the range of values by replacing with an element if a certain
replace_copy_if condition is fulfilled.
fill The function fills the values in the range with a value.
fill_n The function fills the values in the sequence.
generate The function is used for the generation of values of the range.
generate_n The function is used for the generation of values of the sequence.
remove The function removes the values from the range.
remove_if The function removes the values of the range if a condition is fulfilled.
remove_copy The function copies the values of the range by removing them.
The function copies the values of the range by removing them if a condition is
remove_copy_if fulfilled.
unique The function identifies the unique element of the range.
unique_copy The function copies the unique elements of the range.
reverse The function reverses the range.
reverse_copy The function copies the range by reversing values.
rotate The function rotates the elements of the range in left direction.
rotate_copy The function copies the elements of the range which is rotated left.
random_shuffle The function shuffles the range randomly.
shuffle The function shuffles the range randomly with the help of a generator.
Partitions
is_partitioned The function is used to deduce whether the range is partitioned or not.
partition The function is used to partition the range.
stable_partition The function partitions the range in two stable halves.
partition_copy The function copies the range after partition.
partition_point The function returns the partition point for a range.
Sorting
sort The function sorts all the elements in a range.
The function sorts the elements in the range maintaining the relative equivalent
stable_sort order.
partial_sort The function partially sorts the elements of the range.
partial_sort_copy The function copies the elements of the range after sorting it.
is_sorted The function checks whether the range is sorted or not.
is_sorted_until The function checks till which element a range is sorted.
nth_element The functions sorts the elements in the range.
Binary search
lower_bound Returns the lower bound element of the range.
upper_bound Returns the upper bound element of the range.
equal_range The function returns the subrange for the equal elements.
binary_search The function tests if the values in the range exists in a sorted sequence or not.
Merge
merge The function merges two ranges that are in a sorted order.
inplace_merge The function merges two consecutive ranges that are sorted.
includes The function searches whether the sorted range includes another range or not.
set_union The function returns the union of two ranges that is sorted.
set_intersection The function returns the intersection of two ranges that is sorted.
set_difference The function returns the difference of two ranges that is sorted.
set_symmetric_difference The function returns the symmetric difference of two ranges that is sorted.
Heap
push_heap The function pushes new elements in the heap.
pop_heap The function pops new elements in the heap.
make_heap The function is used for the creation of a heap.
sort_heap The function sorts the heap.
is_heap The function checks whether the range is a heap.
is_heap_until The function checks till which position a range is a heap.
Min/Max
min Returns the smallest element of the range.
max Returns the largest element of the range.
minmax Returns the smallest and largest element of the range.
min_element Returns the smallest element of the range.
max_element Returns the largest element of the range.
minmax_element Returns the smallest and largest element of the range.
Other functions
lexicographical_comapre The function performs the lexicographical less-than comparison.
next_permutation The function is used for the transformation of range into the next permutation.
The function is used for the transformation of range into the previous
perv_permutation permutation.
1. all_of()
int main () {
std::array<int,8> foo = {3,5,7,11,13,17,19,23};
return 0;
}
2. any_of()
int main () {
std::array<int,7> foo = {0,1,-1,3,-3,5,-5};
return 0;
}
3. binary_search()
int main () {
int myints[] = {1,2,3,4,5,4,3,2,1};
std::vector<int> v(myints,myints+9); // 1 2 3 4 5 4 3
return 0;
}
4. copy()
int main () {
int myints[]={10,20,30,40,50,60,70};
std::vector<int> myvector (7);
int main () {
std::vector<int> myvector;
Output:
myvector contains: 10 20 30 10 20 30 40 50
6. copy_if()
int main () {
std::vector<int> foo = {25,15,5,-5,-15};
std::vector<int> bar (foo.size());
return 0;
}
Output:
bar contains: 25 15 5
7. copy_n()
int myints[]={10,20,30,40,50,60,70};
std::vector<int> myvector;
return 0;
}
Đầu ra:
myvector chứa: 10 20 30 40 50 60 70
8. count()
return 0;
}
Output:
10 appears 3 times.
20 appears 3 times.
9. count_if()
int main () {
std::vector<int> myvector;
for (int i=1; i<10; i++) myvector.push_back(i); // myvector: 1 2 3 4 5 6 7 8 9
return 0;
}
Output:
myvector contains 5 odd values.
10. equal
int main () {
int myints[] = {20,40,60,80,100}; // myints: 20 40 60 80 100
std::vector<int>myvector (myints,myints+5); // myvector: 20 40 60 80 100
return 0;
}
Output:
The contents of both sequences are equal.
The contents of both sequence differ.
11. equal_range
int main () {
int myints[] = {10,20,30,30,20,10,10,20};
std::vector<int> v(myints,myints+8); // 10 20 30 30 20
std::pair<std::vector<int>::iterator,std::vector<int>::iterator> bounds;
return 0;
}
Output:
bounds at positions 2 and 5
12. fill
return 0;
}
Output:
myvector contains: 5 5 5 8 8 8 0 0
13. fill_n
int main () {
std::vector<int> myvector (8,10); // myvector: 10 10 10 10 10 10 10 10
return 0;
}
Output:
myvector contains: 20 20 20 33 33 33 10 10
14. find
int main () {
// using std::find with array and pointer:
int myints[] = { 10, 20, 30, 40 };
int * p;
return 0;
}
Output:
Element found in myints: 30
Element found in myvector: 30
15. find_end
int main () {
int myints[] = {1,2,3,4,5,1,2,3,4,5};
std::vector<int> haystack (myints,myints+10);
if (it!=haystack.end())
std::cout << "needle1 last found at position " << (it-haystack.begin()) << '\n';
if (it!=haystack.end())
std::cout << "needle2 last found at position " << (it-haystack.begin()) << '\n';
return 0;
}
Output:
needle1 last found at position 5
needle2 last found at position 3
16. find_first_of
int main () {
int mychars[] = {'a','b','c','A','B','C'};
std::vector<char> haystack (mychars,mychars+6);
std::vector<char>::iterator it;
if (it!=haystack.end())
std::cout << "The first match is: " << *it << '\n';
if (it!=haystack.end())
std::cout << "The first match is: " << *it << '\n';
return 0;
}
Output:
The first match is: A
The first match is: a
17. find_if
int main () {
std::vector<int> myvector;
myvector.push_back(10);
myvector.push_back(25);
myvector.push_back(40);
myvector.push_back(55);
return 0;
}
Output:
The first odd value is 25
18. find_if_not
int main () {
std::array<int,5> foo = {1,2,3,4,5};
std::array<int,5>::iterator it =
std::find_if_not (foo.begin(), foo.end(), [](int i){return i%2;} );
std::cout << "The first even value is " << *it << '\n';
return 0;
}
Output:
The first even value is 2
19. for_each
void myfunction (int i) { // function:
std::cout << ' ' << i;
}
int main () {
std::vector<int> myvector;
myvector.push_back(10);
myvector.push_back(20);
myvector.push_back(30);
// or:
std::cout << "myvector contains:";
for_each (myvector.begin(), myvector.end(), myobject);
std::cout << '\n';
return 0;
}
Output:
myvector contains: 10 20 30
myvector contains: 10 20 30
20. generate
// 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) ) );
return 0;
}
A possible output:
myvector contains: 57 87 76 66 85 54 17 15
myvector contains: 1 2 3 4 5 6 7 8
21. generate_n
int current = 0;
int UniqueNumber () { return ++current; }
int main () {
int myarray[9];
return 0;
}
A possible output:
myarray contains: 1 2 3 4 5 6 7 8 9
22. includes
Trả về true nếu phạm vi đã sắp xếp [first1,last1)chứa tất cả các phần tử trong
phạm vi đã sắp xếp [first2,last2).
int main () {
int container[] = {5,10,15,20,25,30,35,40,45,50};
int continent[] = {40,30,20,10};
std::sort (container,container+10);
std::sort (continent,continent+4);
return 0;
}
Output:
container includes continent!
container includes continent!
23. inplace_merge
Hợp nhất hai phạm vi được sắp xếp liên tiếp: [first,middle)và [middle,last), đặt
kết quả vào phạm vi được sắp xếp kết hợp [first,last).
int main () {
int first[] = {5,10,15,20,25};
int second[] = {50,40,30,20,10};
std::vector<int> v(10);
std::vector<int>::iterator it;
std::sort (first,first+5);
std::sort (second,second+5);
// v: 5 10 15 20 25 10 20 30 40 50
std::inplace_merge (v.begin(),v.begin()+5,v.end());
return 0;
}
Output:
The resulting vector contains: 5 10 10 15 20 20 25 30 40 50
24. is_heap
int main () {
std::vector<int> foo {9,5,2,6,4,1,3,8,7};
if (!std::is_heap(foo.begin(),foo.end()))
std::make_heap(foo.begin(),foo.end());
return 0;
}
Output:
Popping out elements: 9 8 7 6 5 4 3 2 1
25. is_heap_until
The function checks till which position a range is a heap.
int main () {
std::vector<int> foo {2,6,9,3,8,4,5,1,7};
std::sort(foo.begin(),foo.end());
std::reverse(foo.begin(),foo.end());
std::cout << "The " << (last-foo.begin()) << " first elements are a valid heap:";
for (auto it=foo.begin(); it!=last; ++it)
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}
26. is_partitioned
int main () {
std::array<int,7> foo {1,2,3,4,5,6,7};
// print contents:
std::cout << "foo:"; for (int& x:foo) std::cout << ' ' << x;
if ( std::is_partitioned(foo.begin(),foo.end(),IsOdd) )
std::cout << " (partitioned)\n";
else
std::cout << " (not partitioned)\n";
// partition array:
std::partition (foo.begin(),foo.end(),IsOdd);
return 0;
}
Edit & run on cpp.sh
Possible output:
foo: 1 2 3 4 5 6 7 (not partitioned)
foo: 1 7 3 5 4 6 2 (partitioned)
27. is_permutation
int main () {
std::array<int,5> foo = {1,2,3,4,5};
std::array<int,5> bar = {3,1,4,5,2};
return 0;
}
Output:
foo and bar contain the same elements.
28. is_sorted
int main () {
std::array<int,4> foo {2,4,1,3};
do {
// try a new permutation:
std::prev_permutation(foo.begin(),foo.end());
// print range:
std::cout << "foo:";
for (int& x:foo) std::cout << ' ' << x;
std::cout << '\n';
} while (!std::is_sorted(foo.begin(),foo.end()));
return 0;
}
Output:
foo: 2 3 4 1
foo: 2 3 1 4
foo: 2 1 4 3
foo: 2 1 3 4
foo: 1 4 3 2
foo: 1 4 2 3
foo: 1 3 4 2
foo: 1 3 2 4
foo: 1 2 4 3
foo: 1 2 3 4
the range is sorted!
29. is_sorted_until
int main () {
std::array<int,4> foo {2,4,1,3};
std::array<int,4>::iterator it;
do {
// try a new permutation:
std::prev_permutation(foo.begin(),foo.end());
// print range:
std::cout << "foo:";
for (int& x:foo) std::cout << ' ' << x;
it=std::is_sorted_until(foo.begin(),foo.end());
std::cout << " (" << (it-foo.begin()) << " elements sorted)\n";
} while (it!=foo.end());
return 0;
}
Output:
foo: 2 3 4 1 (3 elements sorted)
foo: 2 3 1 4 (2 elements sorted)
foo: 2 1 4 3 (1 elements sorted)
foo: 2 1 3 4 (1 elements sorted)
foo: 1 4 3 2 (2 elements sorted)
foo: 1 4 2 3 (2 elements sorted)
foo: 1 3 4 2 (3 elements sorted)
foo: 1 3 2 4 (2 elements sorted)
foo: 1 2 4 3 (3 elements sorted)
foo: 1 2 3 4 (4 elements sorted)
the range is sorted!
30. iter_swap
int main () {
return 0;
}
Output:
myvector contains: 10 99 40 99
31. lexicographical_compare
int main () {
char foo[]="Apple";
char bar[]="apartment";
return 0;
}
The default comparison compares plain ASCII character codes, where 'A' (65) compares
less than 'a' (97).
Our mycomp function transforms the letters to lowercase before comparing them, so here
the first letter not matching is the third ('a' vs 'p').
Output:
Comparing foo and bar lexicographically (foo<bar):
Using default comparison (operator<): true
Using mycomp as comparison object: false
32. lower_bound
int main () {
int myints[] = {10,20,30,30,20,10,10,20};
std::vector<int> v(myints,myints+8); // 10 20 30 30 20 10 10 20
std::vector<int>::iterator low,up;
low=std::lower_bound (v.begin(), v.end(), 20); // ^
up= std::upper_bound (v.begin(), v.end(), 20); // ^
std::cout << "lower_bound at position " << (low- v.begin()) << '\n';
std::cout << "upper_bound at position " << (up - v.begin()) << '\n';
return 0;
}
Output:
lower_bound at position 3
upper_bound at position 6
33. make_heap
int main () {
int myints[] = {10,20,30,5,15};
std::vector<int> v(myints,myints+5);
std::make_heap (v.begin(),v.end());
std::cout << "initial max heap : " << v.front() << '\n';
std::pop_heap (v.begin(),v.end()); v.pop_back();
std::cout << "max heap after pop : " << v.front() << '\n';
std::sort_heap (v.begin(),v.end());
return 0;
}
Output:
initial max heap : 30
max heap after pop : 20
max heap after push: 99
final sorted range : 5 10 15 20 99
34. max
int main () {
std::cout << "max(1,2)==" << std::max(1,2) << '\n';
std::cout << "max(2,1)==" << std::max(2,1) << '\n';
std::cout << "max('a','z')==" << std::max('a','z') << '\n';
std::cout << "max(3.14,2.73)==" << std::max(3.14,2.73) << '\n';
return 0;
}
Output:
max(1,2)==2
max(2,1)==2
max('a','z')==z
max(3.14,2.73)==3.14
35. max_element
struct myclass {
bool operator() (int i,int j) { return i<j; }
} myobj;
int main () {
int myints[] = {3,7,2,5,6,4,9};
// using default comparison:
std::cout << "The smallest element is " << *std::min_element(myints,myints+7) << '\
std::cout << "The largest element is " << *std::max_element(myints,myints+7) << '\
return 0;
}
Output:
The smallest element is 2
The largest element is 9
The smallest element is 2
The largest element is 9
The smallest element is 2
The largest element is 9
36. merge
int main () {
int first[] = {5,10,15,20,25};
int second[] = {50,40,30,20,10};
std::vector<int> v(10);
std::sort (first,first+5);
std::sort (second,second+5);
std::merge (first,first+5,second,second+5,v.begin());
return 0;
}
Output:
The resulting vector contains: 5 10 10 15 20 20 25 30 40 50
37. min
int main () {
std::cout << "min(1,2)==" << std::min(1,2) << '\n';
std::cout << "min(2,1)==" << std::min(2,1) << '\n';
std::cout << "min('a','z')==" << std::min('a','z') << '\n';
std::cout << "min(3.14,2.72)==" << std::min(3.14,2.72) << '\n';
return 0;
}
Output:
min(1,2)==1
min(2,1)==1
min('a','z')==a
min(3.14,2.72)==2.72
38. min_element
struct myclass {
bool operator() (int i,int j) { return i<j; }
} myobj;
int main () {
int myints[] = {3,7,2,5,6,4,9};
return 0;
}
Output:
The smallest element is 2
The largest element is 9
The smallest element is 2
The largest element is 9
The smallest element is 2
The largest element is 9
39. minmax
int main () {
auto result = std::minmax({1,2,3,4,5});
std::cout << "minmax({1,2,3,4,5}): ";
std::cout << result.first << ' ' << result.second << '\n';
return 0;
}
Output:
minmax({1,2,3,4,5}): 1 5
40. minmax_element
int main () {
std::array<int,7> foo {3,7,2,9,5,8,6};
// print result:
std::cout << "min is " << *result.first;
std::cout << ", at position " << (result.first-foo.begin()) << '\n';
std::cout << "max is " << *result.second;
std::cout << ", at position " << (result.second-foo.begin()) << '\n';
return 0;
}
Output:
min is 2, at position 2
max is 9, at position 3
41. mismatch
int main () {
std::vector<int> myvector;
for (int i=1; i<6; i++) myvector.push_back (i*10); // myvector: 10 20 30 40 50
std::pair<std::vector<int>::iterator,int*> mypair;
return 0;
}
Output:
First mismatching elements: 30 and 80
Second mismatching elements: 40 and 320
42. move
int main () {
std::vector<std::string> foo = {"air","water","fire","earth"};
std::vector<std::string> bar (4);
// moving ranges:
std::cout << "Moving ranges...\n";
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 << '\n';
std::cout << "bar contains " << bar.size() << " elements:";
for (std::string& x: bar) std::cout << " [" << x << "]";
std::cout << '\n';
// moving container:
std::cout << "Moving container...\n";
foo = std::move (bar);
std::cout << "foo contains " << foo.size() << " elements:";
for (std::string& x: foo) std::cout << " [" << x << "]";
std::cout << '\n';
return 0;
}
Possible output:
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
43. move_backward
// move_backward example
int main () {
std::string elems[10] = {"air","water","fire","earth"};
return 0;
}
Output:
elems contains: [ether] [air] [water] [fire] [earth] [] [] [] [] []
44. next_permutation
int main () {
int myints[] = {1,2,3};
std::sort (myints,myints+3);
std::cout << "After loop: " << myints[0] << ' ' << myints[1] << ' ' << myints[2] <
return 0;
}
Output:
The 3! possible permutations with 3 elements:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
After loop: 1 2 3
45. none_of
int main () {
std::array<int,8> foo = {1,2,4,8,16,32,64,128};
return 0;
}
Output:
There are no negative elements in the range.
46. nth_element
int main () {
std::vector<int> myvector;
return 0;
}
Possible output:
myvector contains: 3 1 4 2 5 6 9 7 8
47. partial_sort
int main () {
int myints[] = {9,8,7,6,5,4,3,2,1};
std::vector<int> myvector (myints, myints+9);
return 0;
}
Possible output:
myvector contains: 1 2 3 4 5 9 8 7 6
48. partial_sort_copy
int main () {
int myints[] = {9,8,7,6,5,4,3,2,1};
std::vector<int> myvector (5);
return 0;
}
Output:
myvector contains: 1 2 3 4 5
49. partition
int main () {
std::vector<int> myvector;
std::vector<int>::iterator bound;
bound = std::partition (myvector.begin(), myvector.end(), IsOdd);
return 0;
}
Possible output:
odd elements: 1 9 3 7 5
even elements: 6 4 8 2
50. partition_copy
int main () {
std::vector<int> foo {1,2,3,4,5,6,7,8,9};
std::vector<int> odd, even;
// partition:
std::partition_copy (foo.begin(), foo.end(), odd.begin(), even.begin(), IsOdd)
// print contents:
std::cout << "odd: "; for (int& x:odd) std::cout << ' ' << x; std::cout << '\n'
std::cout << "even: "; for (int& x:even) std::cout << ' ' << x; std::cout << '\n'
return 0;
}
Output:
odd: 1 3 5 7 9
even: 2 4 6 8
51. partition_point
int main () {
std::vector<int> foo {1,2,3,4,5,6,7,8,9};
std::vector<int> odd;
std::partition (foo.begin(),foo.end(),IsOdd);
auto it = std::partition_point(foo.begin(),foo.end(),IsOdd);
odd.assign (foo.begin(),it);
return 0;
}
Output:
odd: 1 3 5 7 9
52. pop_heap
int main () {
int myints[] = {10,20,30,5,15};
std::vector<int> v(myints,myints+5);
std::make_heap (v.begin(),v.end());
std::cout << "initial max heap : " << v.front() << '\n';
std::sort_heap (v.begin(),v.end());
std::cout << "final sorted range :";
for (unsigned i=0; i<v.size(); i++)
std::cout << ' ' << v[i];
return 0;
}
Output:
initial max heap : 30
max heap after pop : 20
max heap after push: 99
final sorted range : 5 10 15 20 99
53. prev_permutation
int main () {
int myints[] = {1,2,3};
std::sort (myints,myints+3);
std::reverse (myints,myints+3);
std::cout << "After loop: " << myints[0] << ' ' << myints[1] << ' ' << myints[2] <
return 0;
}
Output:
3 2 1
3 1 2
2 3 1
2 1 3
1 3 2
1 2 3
After loop: 3 2 1
54. push_heap
int main () {
int myints[] = {10,20,30,5,15};
std::vector<int> v(myints,myints+5);
std::make_heap (v.begin(),v.end());
std::cout << "initial max heap : " << v.front() << '\n';
std::pop_heap (v.begin(),v.end()); v.pop_back();
std::cout << "max heap after pop : " << v.front() << '\n';
std::sort_heap (v.begin(),v.end());
return 0;
}
Output:
initial max heap : 30
max heap after pop : 20
max heap after push: 99
final sorted range : 5 10 15 20 99
55. random_shuffle
int main () {
std::srand ( unsigned ( std::time(0) ) );
std::vector<int> myvector;
// using myrandom:
std::random_shuffle ( myvector.begin(), myvector.end(), myrandom);
Possible output:
myvector contains: 3 4 1 6 8 9 2 7 5
56. 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); // ^ ^
return 0;
}
Output:
range contains: 10 30 30 10 10
57. remove_copy
int main () {
int myints[] = {10,20,30,30,20,10,10,20}; // 10 20 30 30 20 10 1
std::vector<int> myvector (8);
std::remove_copy (myints,myints+8,myvector.begin(),20); // 10 30 30 10 10 0 0
return 0;
}
Output:
myvector contains: 10 30 30 10 10 0 0 0
58. remove_copy_if
bool IsOdd (int i) { return ((i%2)==1); }
int main () {
int myints[] = {1,2,3,4,5,6,7,8,9};
std::vector<int> myvector (9);
std::remove_copy_if (myints,myints+9,myvector.begin(),IsOdd);
return 0;
}
Output:
myvector contains: 2 4 6 8 0 0 0 0 0
59. remove_if
int main () {
int myints[] = {1,2,3,4,5,6,7,8,9}; // 1 2 3 4 5 6 7 8 9
// bounds of range:
int* pbegin = myints; // ^
int* pend = myints+sizeof(myints)/sizeof(int); // ^ ^
return 0;
}
Output:
the range contains: 2 4 6 8
60. replace
int main () {
int myints[] = { 10, 20, 30, 30, 20, 10, 10, 20 };
std::vector<int> myvector (myints, myints+8); // 10 20 30 30 20 10
return 0;
}
Output:
myvector contains: 10 99 30 30 99 10 10 99
61. replace_copy
int main () {
int myints[] = { 10, 20, 30, 30, 20, 10, 10, 20 };
return 0;
}
Output:
myvector contains: 10 99 30 30 99 10 10 99
62. replace_copy_if
int main () {
std::vector<int> foo,bar;
return 0;
}
Output:
second contains: 0 2 0 4 0 6 0 8 0
63. replace_if
int main () {
std::vector<int> myvector;
return 0;
}
Output:
myvector contains: 0 2 0 4 0 6 0 8 0
64. reverse
int main () {
std::vector<int> myvector;
std::reverse(myvector.begin(),myvector.end()); // 9 8 7 6 5 4 3 2 1
return 0;
}
Output:
myvector contains: 9 8 7 6 5 4 3 2 1
65. reverse_copy
int main () {
int myints[] ={1,2,3,4,5,6,7,8,9};
std::vector<int> myvector;
return 0;
}
Output:
myvector contains: 9 8 7 6 5 4 3 2 1
66. rotate
int main () {
std::vector<int> myvector;
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<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}
Output:
myvector contains: 4 5 6 7 8 9 1 2 3
67. rotate_copy
int main () {
int myints[] = {10,20,30,40,50,60,70};
return 0;
}
Output:
myvector contains: 40 50 60 70 10 20 30
68. search
int main () {
std::vector<int> haystack;
if (it!=haystack.end())
std::cout << "needle1 found at position " << (it-haystack.begin()) << '\n';
else
std::cout << "needle1 not found\n";
if (it!=haystack.end())
std::cout << "needle2 found at position " << (it-haystack.begin()) << '\n';
else
std::cout << "needle2 not found\n";
return 0;
}
Output:
needle1 found at position 3
needle2 not found
69. search_n
int main () {
int myints[]={10,20,30,30,20,10,10,20};
std::vector<int> myvector (myints,myints+8);
std::vector<int>::iterator it;
if (it!=myvector.end())
std::cout << "two 30s found at position " << (it-myvector.begin()) << '\n';
else
std::cout << "match not found\n";
if (it!=myvector.end())
std::cout << "two 10s found at position " << int(it-myvector.begin()) << '\n';
else
std::cout << "match not found\n";
return 0;
}
Output:
Two 30s found at position 2
Two 10s found at position 5
70. set_difference
int main () {
int first[] = {5,10,15,20,25};
int second[] = {50,40,30,20,10};
std::vector<int> v(10); // 0 0 0 0 0 0 0 0 0 0
std::vector<int>::iterator it;
std::sort (first,first+5); // 5 10 15 20 25
std::sort (second,second+5); // 10 20 30 40 50
return 0;
}
Output:
The difference has 3 elements:
5 15 25
71. set_intersection
int main () {
int first[] = {5,10,15,20,25};
int second[] = {50,40,30,20,10};
std::vector<int> v(10); // 0 0 0 0 0 0 0 0 0 0
std::vector<int>::iterator it;
std::sort (first,first+5); // 5 10 15 20 25
std::sort (second,second+5); // 10 20 30 40 50
std::cout << "The intersection has " << (v.size()) << " elements:\n";
for (it=v.begin(); it!=v.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}
Output:
The intersection has 2 elements:
10 20
72. set_symmetric_difference
int main () {
int first[] = {5,10,15,20,25};
int second[] = {50,40,30,20,10};
std::vector<int> v(10); // 0 0 0 0 0 0 0 0 0 0
std::vector<int>::iterator it;
std::sort (first,first+5); // 5 10 15 20 25
std::sort (second,second+5); // 10 20 30 40 50
std::cout << "The symmetric difference has " << (v.size()) << " elements:\n";
for (it=v.begin(); it!=v.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}
Output:
The symmetric difference has 6 elements:
5 15 25 30 40 50
73. set_union
int main () {
int first[] = {5,10,15,20,25};
int second[] = {50,40,30,20,10};
std::vector<int> v(10); // 0 0 0 0 0 0 0 0 0 0
std::vector<int>::iterator it;
std::sort (first,first+5); // 5 10 15 20 25
std::sort (second,second+5); // 10 20 30 40 50
std::cout << "The union has " << (v.size()) << " elements:\n";
for (it=v.begin(); it!=v.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}
Output:
The union has 8 elements:
5 10 15 20 25 30 40 50
74. shuffle
int main () {
std::array<int,5> foo {1,2,3,4,5};
return 0;
}
Possible output:
shuffled elements: 3 1 4 2 5
75. sort
struct myclass {
bool operator() (int i,int j) { return (i<j);}
} myobject;
int main () {
int myints[] = {32,71,12,45,26,80,53,33};
std::vector<int> myvector (myints, myints+8); // 32 71 12 45 26
return 0;
}
Output:
myvector contains: 12 26 32 33 45 53 71 80
76. sort_heap
int main () {
int myints[] = {10,20,30,5,15};
std::vector<int> v(myints,myints+5);
std::make_heap (v.begin(),v.end());
std::cout << "initial max heap : " << v.front() << '\n';
std::sort_heap (v.begin(),v.end());
return 0;
}
Output:
initial max heap : 30
max heap after pop : 20
max heap after push: 99
final sorted range : 5 10 15 20 99
77. stable_partition
int main () {
std::vector<int> myvector;
std::vector<int>::iterator bound;
bound = std::stable_partition (myvector.begin(), myvector.end(), IsOdd);
return 0;
}
Output:
odd elements: 1 3 5 7 9
even elements: 2 4 6 8
78. stable_sort
int main () {
double mydoubles[] = {3.14, 1.41, 2.72, 4.67, 1.73, 1.32, 1.62, 2.58};
std::vector<double> myvector;
myvector.assign(mydoubles,mydoubles+8);
myvector.assign(mydoubles,mydoubles+8);
return 0;
}
compare_as_ints is a function that compares only the integral part of the elements,
therefore, elements with the same integral part are considered
equivalent. stable_sort preserves the relative order these had before the call.
Possible output:
using default comparison: 1.32 1.41 1.62 1.73 2.58 2.72 3.14 4.67
using 'compare_as_ints' : 1.41 1.73 1.32 1.62 2.72 2.58 3.14 4.67
79. swap
int main () {
return 0;
}
Output:
foo contains: 10 10 10 10 10 10
80. swap_ranges
int main () {
std::vector<int> foo (5,10); // foo: 10 10 10 10 10
std::vector<int> bar (5,33); // bar: 33 33 33 33 33
return 0;
}
Output:
foo contains: 10 33 33 33 10
bar contains: 10 10 10 33 33
81. transform
int main () {
std::vector<int> foo;
std::vector<int> bar;
return 0;
}
Output:
foo contains: 21 41 61 81 101
82. unique
int main () {
int myints[] = {10,20,20,20,30,30,20,20,10}; // 10 20 20 20 30 30 20
std::vector<int> myvector (myints,myints+9);
myvector.resize( std::distance(myvector.begin(),it) ); // 10 20 30 20 10
return 0;
}
Output:
myvector contains: 10 20 30 20 10
83. unique_copy
int main () {
int myints[] = {10,20,20,20,30,30,20,20,10};
std::vector<int> myvector (9); // 0 0 0 0 0 0
std::sort (myvector.begin(),it); // 10 10 20 20 30 0
// ^
myvector.resize( std::distance(myvector.begin(),it) ); // 10 20 30
return 0;
}
Output:
myvector contains: 10 20 30
84. upper_bound
int main () {
int myints[] = {10,20,30,30,20,10,10,20};
std::vector<int> v(myints,myints+8); // 10 20 30 30 20 10 10 20
std::vector<int>::iterator low,up;
low=std::lower_bound (v.begin(), v.end(), 20); // ^
up= std::upper_bound (v.begin(), v.end(), 20); // ^
std::cout << "lower_bound at position " << (low- v.begin()) << '\n';
std::cout << "upper_bound at position " << (up - v.begin()) << '\n';
return 0;
}
Output:
lower_bound at position 3
upper_bound at position 6