C++ STL(표준 템플릿 라이브러리)에는 잘 알려지지 않았지만 알아두면 코딩 생산성을 크게 높일 수 있는 숨겨진 기능들이 많습니다. 이 글에서는 실전에서 바로 활용할 수 있는 대표적인 트릭들을 예제 코드와 함께 소개합니다.
1. 중괄호({})로 pair 값 간편하게 초기화하기
pair 객체에 값을 할당할 때 make_pair() 함수 대신 중괄호를 사용하면 코드를 더 간결하게 작성할 수 있습니다. 이 방법은 tuple에도 동일하게 적용됩니다.
pair<int, int> my_pair = make_pair(10, 20);
pair<int, int> my_pair2 = { 10, 20 }; // 중괄호 사용
pair<int, pair<char, int>> my_pair3 = { 10, { 'A', 20 } }; // 복합 pair2. #include <bits/stdc++.h>로 헤더 한 번에 포함하기
필요한 헤더 파일 이름을 일일이 외우기 어렵거나 자주 잊어버린다면 아래 구문 하나로 거의 모든 표준 라이브러리를 한 번에 포함할 수 있습니다.
#include <bits/stdc++.h>
다만 이 헤더는 GCC 계열 컴파일러에서 주로 지원되므로, MSVC처럼 다른 컴파일러 환경에서는 호환되지 않을 수 있다는 점에 유의해야 합니다.
3. 내장 GCD 함수 __gcd() 활용하기
C++에는 최대공약수(GCD)를 구하는 내장 함수가 있습니다. 비교적 덜 알려져 있어 모르는 경우가 많지만, 직접 유클리드 호제법을 구현하지 않고도 간단히 사용할 수 있습니다.
__gcd(a, b)
4. to_string(): 숫자를 문자열로 변환하기
to_string() 함수를 사용하면 정수나 실수 등 다양한 데이터 타입을 손쉽게 문자열로 변환할 수 있습니다.
float x = 2.3654; string str = to_string(x);
5. stoi(): 문자열을 정수로 변환하기
반대로 문자열을 정수로 변환할 때는 stoi() 함수를 사용합니다. 이 외에도 stof(), stol(), stoll() 등 다양한 형변환 함수가 함께 제공됩니다.
string num = "256"; int x = stoi(num);
6. 전역 변수는 자동으로 0으로 초기화된다
함수 밖에서 선언한 변수(전역 변수)는 정적(static) 특성을 가지며, 별도로 초기화하지 않아도 기본값이 0으로 설정됩니다. 지역 변수와 달리 쓰레기 값이 들어가지 않으므로 이 점을 활용하면 초기화 코드를 줄일 수 있습니다.
7. 배열 전체를 0으로 초기화하기
배열을 일반적으로 선언하면 요소마다 쓰레기 값이 들어갑니다. 모든 요소를 0으로 초기화하고 싶다면 아래와 같이 선언하면 됩니다.
int arr[10] = {};8. memset()으로 배열 일괄 초기화하기
memset 함수를 사용하면 배열 전체를 원하는 값으로 빠르게 채울 수 있습니다.
int arr[10]; memset(arr, 5, sizeof(arr));
주의할 점은 memset이 바이트 단위로 값을 설정한다는 것입니다. 따라서 위 코드에서 int 배열의 각 요소는 5가 아니라 0x05050505라는 값이 됩니다. 안정적으로 사용하려면 0 또는 -1로 초기화하는 경우에만 memset을 사용하는 것이 좋으며, 그 외의 값은 fill() 함수나 반복문을 활용하는 것이 안전합니다.