C & CPP
[CPP] <algorithm> 헤더에서 유용한 함수
에드윈H
2023. 11. 30. 13:21
코딩테스트들을 반복해서 해보다가 자주 사용해서 유용한 함수들을 모아봤다.
더 많이 있기도 하지만 최대한 '자주' 사용한것들을 모아봤고, 중간 중간 추가 해주는 글이다.
- 각 함수들이 만능은 아니다. 사용 한다고 무조건 장점만 있는것도 아니다.
- 더 나은 방법이 있을수도 있다.
- std::reverse - 함수 주어진 배열을 뒤집어 준다.
#include <iostream>
#include <algorithm> // std::reverse
int main() {
const int size = 5;
int myArray[size] = {1, 2, 3, 4, 5};
// 배열 뒤집기
std::reverse(myArray, myArray + size);
// 뒤집힌 배열 출력
std::cout << "Reversed Array: ";
for (int i = 0; i < size; i++) {
std::cout << myArray[i] << " ";
}
return 0;
}
- std::sort - 요소들을 정렬해준다.
#include <algorithm>
#include <vector>
int main() {
std::vector<int> myVector = {4, 2, 5, 1, 3};
std::sort(myVector.begin(), myVector.end());
// 정렬된 벡터 출력: 1 2 3 4 5
for (int num : myVector) {
std::cout << num << " ";
}
return 0;
}
- std::find - 요소를 찾아서 해당 위치 반환
#include <algorithm>
#include <vector>
int main() {
std::vector<int> myVector = {1, 2, 3, 4, 5};
auto it = std::find(myVector.begin(), myVector.end(), 3);
if (it != myVector.end()) {
std::cout << "Element found at position: " << std::distance(myVector.begin(), it) << std::endl;
} else {
std::cout << "Element not found" << std::endl;
}
return 0;
}
- std::find - 요소를 특정 조건으로 찾아서 해당 위치 반환
#include <algorithm>
#include <vector>
#include <iostream>
int main() {
std::vector<int> myVector = {1, 2, 3, 4, 5};
auto it = std::find_if(myVector.begin(), myVector.end(), [](int x) { return x % 2 == 0; });
if (it != myVector.end()) {
std::cout << "First even element found: " << *it << std::endl;
} else {
std::cout << "No even elements found" << std::endl;
}
return 0;
}
- std::min / std::max - 최소값 최대값을 찾아준다.
#include <algorithm>
#include <iostream>
int main() {
int a = 5, b = 3;
int minValue = std::min(a, b);
int maxValue = std::max(a, b);
std::cout << "Min: " << minValue << std::endl; // 출력: 3
std::cout << "Max: " << maxValue << std::endl; // 출력: 5
return 0;
}
- std::count - 특정 값의 갯수를 세어준다.
#include <algorithm>
#include <vector>
#include <iostream>
int main() {
std::vector<int> myVector = {1, 2, 2, 3, 2, 4, 5};
int count = std::count(myVector.begin(), myVector.end(), 2);
std::cout << "Number of 2s: " << count << std::endl; // 출력: 3
return 0;
}
- std::count_if - 특정 값의 조건으로 갯수를 세어준다.
#include <algorithm>
#include <vector>
#include <iostream>
int main() {
std::vector<int> myVector = {1, 2, 3, 4, 5};
int count = std::count_if(myVector.begin(), myVector.end(), [](int x) { return x % 2 == 0; });
std::cout << "Number of even elements: " << count << std::endl;
return 0;
}
- std::for_each - 범위의 요소들에 대해 특정 동작을 수행
#include <algorithm>
#include <vector>
#include <iostream>
int main() {
std::vector<int> myVector = {1, 2, 3, 4, 5};
std::for_each(myVector.begin(), myVector.end(), [](int& x) { x *= 2; });
// 모든 요소를 2배로 변경한 벡터 출력: 2 4 6 8 10
for (int num : myVector) {
std::cout << num << " ";
}
return 0;
}
- std::accumulate - 범위의 값을 합해준다.
#include <algorithm>
#include <numeric> // std::accumulate
#include <vector>
#include <iostream>
int main() {
std::vector<int> myVector = {1, 2, 3, 4, 5};
int sum = std::accumulate(myVector.begin(), myVector.end(), 0);
std::cout << "Sum of elements: " << sum << std::endl;
return 0;
}
- std::unique - 중복된 요소를 제거한다( 정렬된 벡터여야 한다)
#include <algorithm>
#include <vector>
#include <iostream>
int main() {
std::vector<int> myVector = {1, 2, 2, 3, 3, 4, 5};
std::sort(myVector.begin(), myVector.end());
auto last = std::unique(myVector.begin(), myVector.end());
myVector.erase(last, myVector.end());
// 중복이 제거된 벡터 출력: 1 2 3 4 5
for (int num : myVector) {
std::cout << num << " ";
}
return 0;
}