c++ vector, sort, stable_sort, minmax, find, accumulate 코드
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
#include <iostream>
#include <vector>
#include <array>
#include <algorithm>
#include <numeric>
struct Employee
{
int age;
std::string name;
};
bool operator<(const Employee& lhs, const Employee& rhs)
{
return lhs.age < rhs.age;
};
void fnArray()
{
std::array<int, 100> nums;
}
void fnVector()
{
std::vector<int> nums;
nums.resize(100000);
}
int main()
{
//std::array<int, 100> nums;
std::vector<int> nums{ 1,3,6,8,129,38,3,6,8 };
// sort
// lambda 함수도 넣을 수 있음
std::sort(nums.begin(), nums.end());
for (auto num : nums)
{
std::cout << num << " ";
}
std::cout << std::endl;
//stable_sort
//기준대로 sort는 되지만, 그 이외의 것들은 그대로이다.
std::vector<Employee> v =
{
{108, "Zaphod"},
{32, "Arthur"},
{108, "Ford"}
};
std::stable_sort(v.begin(), v.end());
for (const Employee& e : v)
std::cout << e.age << ", " << e.name << '\n';
std::cout << std::endl;
//partial_sort
//부분(top-5)만 sort함
std::array<int, 10> s{ 5,7,4,2,8,6,1,9,0,3 };
std::partial_sort(s.begin(), s.begin() + 3, s.end());
for (int a : s) {
std::cout << a << " ";
}
std::cout << std::endl;
// 가운데 숫자를 기준으로 정렬한다
std::vector<int> t{ 5,6,4,3,2,6,7,9,3 };
std::nth_element(t.begin(), t.begin() + t.size() / 2, t.end());
std::cout << "The median is " << t[t.size() / 2] << '\n';
for (int a : t) {
std::cout << a << " ";
};
std::cout << std::endl;
// Min값과 Max값
std::vector<int> minv{ 3,1,4,1,5,9 };
std::vector<int>::iterator min_result = std::min_element(minv.begin(), minv.end());
std::vector<int>::iterator max_result = std::max_element(minv.begin(), minv.end());
std::cout << "min element at : " << std::distance(minv.begin(), min_result) << std::endl;
std::cout << "max element at : " << std::distance(minv.begin(), max_result) << std::endl;
// Min Max를 한번에 구한다
// vector find하기
const std::vector<int> nums1{ 0,1,2,3,4 };
const auto resultItr = std::find(nums1.begin(), nums1.end(), 2);
const auto resultItr_nolist = std::find(nums1.begin(), nums1.end(), 10);
if (resultItr != nums1.end())
{
std::cout << "idx: " << std::distance(nums1.begin(), resultItr) << std::endl;
}
else
{
std::cout << "no elem found!" << std::endl;
}
if (resultItr_nolist != nums1.end())
{
std::cout << "idx: " << std::distance(nums1.begin(), resultItr_nolist) << std::endl;
}
else
{
std::cout << "no elem found!" << std::endl;
}
// accumulate 은 single core (#include <numeric> 필요)
// reduce는 multiple core (#include <numeric> 필요)
std::vector<int> nums2{ 1,2,3,4,5,6,7,8,9,10 };
int sum = std::accumulate(nums2.begin(), nums2.end(), 0);
int product = std::accumulate(nums2.begin(), nums2.end(), 1, std::multiplies<int>());
std::cout << "sum: " << sum << '\n'
<< "product: " << product << "\n";
return 0;
}
|
'C' 카테고리의 다른 글
c++ stl deque 설명, 성능상 이슈 (0) | 2021.06.27 |
---|---|
c++ vector, array 다차원 배열, 2d array를 1d처럼, 성능 주의점 (0) | 2021.06.27 |
c++ vector와 array의 차이 (0) | 2021.06.26 |
c++ 벡터 remove, remove_if 사용 기록 (0) | 2021.06.26 |
c++ vector for loop, iterator, range 속도 측정, For Loop을 꼭 써야 하는 경우 (0) | 2021.06.25 |