Make Unreal REAL.
article thumbnail
multiset, multimap에서 1개 원소만 삭제

erase() 함수는 보통 하나의 원소만 삭제해서 multiset에서도 그런 줄 알았는데 아니었다. multiset, multimap에서 erase() 함수는 해당 키를 갖는 원소를 모두 삭제한다. #include #include #include using namespace std; void main() { multiset mset{1, 4, 2, 1, 5, 3}; unordered_multimap ummap{{1, 0}, {4, 0}, {2, 0}, {1, 0}, {5, 0}, {3, 0}}; mset.erase(1); ummap.erase(1); for (int e : mset) cout

article thumbnail
vector에서 중복 원소 제거

vector에서 중복 원소를 제거하는 방법이다. unique가 실행될 때 각 원소는 자신의 양 옆 원소와 비교하여 중복을 제거한다. 그러므로 O(n)에 수행되지만 정렬된 상태에서만 정상 작동한다. 버블 정렬과 비슷한 방식이며 뒤로 몰아 놓은 중복 원소들의 시작 지점 반복자를 반환한다. #include #include #include using namespace std; template ostream& operator

article thumbnail
유클리드 호제법(Euclidean algorithm)

최대공약수(Greatest Common Divisor)를 구하는 알고리즘 중 하나이다. 유클리드 호제법은 다음의 성질을 이용한다. // a를 b로 나눈 나머지를 r이라고 할 때 r = a % b // a, b의 최대공약수는 b, r의 최대공약수와 같다. GCD(a, b) == GCD(b, r) 의사코드로 나타내면 다음과 같다. GCD(a, b): if b == 0 return a else return GCD(b, a % b) C++로 간단하게 작성할 수 있다. int GCD(int a, int b) { return b ? GCD(b, a % b) : a; } 최소공배수(Least Common Multiple)는 다음과 같이 구할 수 있다. // a, b의 최대공약수를 G라고 할 때 G = GCD(a, b..

article thumbnail
std::count 잘 사용하기

2의 개수 count(v.begin(), v.end(), 2); 30세 미만인 사람의 수 count_if(v.begin(), v.end(), [](const Person &prsn) { return prsn.age < 30; }); accumulate에서 다음은 같다. accumulate(v.begin(), v.end(), 0); // 전달된 Lambda 함수에서 n은 현재 까지의 합, e는 현재 원소를 뜻한다. accumulate(v.begin(), v.end(), 0, [](const int n, const int e) { return n + e; }); 2차원 벡터에서 8의 개수 vv의 원소 자료형이 vector이기 때문에 Lambda 식 함수 op의 2번째 인자 형식도 맞춰주어야 한다. // 현재..

article thumbnail
for_each와 transform

for_each 원소를 수정하지 않는 경우 사용(레퍼런스로 원소를 받을 경우 수정 가능하나 권장하지 않음) 모든 원소를 순차적으로 접근함을 보장 transform 원소를 수정하거나 다른 곳으로 적용할 경우 사용 모든 원소가 순차적으로 접근됨을 보장하지 않음 #include #include using namespace std; void main() { string s = "Hello World!"; // s의 모든 문자를 1씩 증가시켜 s에 다시 저장한다. transform(s.begin(), s.end(), s.begin(), [](char c) { return ++c; }); // s의 모든 문자를 순서대로 출력한다. for_each(s.begin(), s.end(), [](char c) { cout

article thumbnail
값의 범위를 제한하는 clamp 구현

clamp란 최댓값, 최솟값을 지정해서 입력된 값을 그 범위 안에 제한시키는 것을 뜻한다. C++에서도 C++17부터 clamp를 공식 지원하지만 낮은 버전이라 사용이 불가능할 때는 다음과 같이 구현하면 된다. clampedVal = max(minVal, min(val, maxVal)); 최댓값 제한, 최솟값 제한을 1번씩 적용한 것이다.

검색 태그