320x100

프로그래밍 89

std::min, std::max 사용시

windows.h를 include하고 std::max(), std::min() 함수를 사용하려고 하면 error C2589: '(': '::' 오른쪽에 잘못된 토큰이 있습니다. error C2062: 예기치 않은 'unknown-type' 형식입니다. error C2059: 구문 오류: ')' 와 같은 에러 메시지를 보게 된다. 이유는 windows.h에 이미 정의 되어있는 max 매크로와 min 매크로가 존재하기 때문에 이름이 충돌나는 것인데 충돌 방지를 위해 다음과 같이 windows.h include 위에 NOMINMAX 디파인을 추가하면 해당 오류는 발생하지 않는다. #define NOMINMAX #include

std::map

map은 key와 value로 구성된 컨테이너로 을 include해 사용할 수 있다. 선언 // key_type - 키의 오름차순으로 정렬되며 정수형 > 스트링 > 사용자 정의 타입 순으로 느려진다. std::map map_container; 데이터 삽입 insert의 결과로 pair가 리턴되며, second값이 bool 타입이므로 insert의 성공여부를 알 수 있다. map_container.insert(std::make_pair(key, data)); 데이터를 삽입하기에 가장 편한 방법이다. map_container[key] = data; 이 두 가지 방법의 차이점에 대해 정리해둔 블로그 내용을 간략히 얘기하자면, operator[]는 map에서 키를 먼저 찾아보고 없는 경우에 value의 기본 생..

std::clamp

clamp란 값을 특정 범위 내에 가둬놓고 싶을 때 사용하는 함수다. 예를들어, x의 값을 1부터 10까지 한정짓고 싶다면 보통은 if (x > 10) x = 10; else if (x < 1) x = 1; 이렇게 코딩을 하거나 아니면 커스텀으로 clamp 함수를 만들었을텐데 이젠 C++에서 공식적인 함수로 지원한다. C++17부터 지원하며 헤더파일을 include하고 사용 한다. #include int func(int x) { return std::clamp(x, 1, 10); } int main() { int x = 5; x = func(x++); // 6 x = 10; x = func(x++); // 10; return 0; } https://en.cppreference.com/w/cpp/algor..

std::accumulate

주어진 범위의 데이터를 인자로 넘겨진 계산식으로 계산해 반환한다. first 요소 범위의 시작 last 요소 범위의 끝 init 초기 값 op 적용될 한 쌍의 작업 함수 객체 (시그니처: Ret func(const Type1 &a, const Type2 &b); #include #include #include #include #include int main() { std::vector v{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int sum = std::accumulate(v.begin(), v.end(), 0); int product = std::accumulate(v.begin(), v.end(), 1, std::multiplies()); auto dash_fold = [](std:..

320x100