본문 바로가기

Algorithm/Algorithm Logic

[C++/Algorithm] <bits/stdc++.h> 사용하기

코딩 테스트를 c++로 준비하는 학생들은 stl에 대해 익숙할 것이다.

 

필자 역시 코딩 테스트를 c++로 준비하는 입장에서 자주 쓰는 stl 함수에 대해 기본적인 문법을 까먹을 때 즈음 자주 확인한다.

 

보통 string, vector, queue, algorithm, map, set... 등의 stl library를 주로 사용하는데 코딩 테스트를 처음 준비하시는 입장이라면 bits/stdc++.h라는 파일을 바로 사용하기보다는 익숙해질 때 까지 수동적으로 헤더 파일을 추가하는 방법을 추천한다. 왜냐하면 어떠한 자료구조를 사용할지 고민해보고, 해당 헤더 파일에 포함되어있는 메서드를 직접 추가해보며 확인하는 과정이 꽤 중요한 공부가 된다.

(처음 준비하시는 분이라면 파이썬으로 얼른 도망가세요)

 

... 여튼 어느 정도 이제 라이브러리를 사용해 보았거나, 어느 정도 그 역할과 사용법에 익숙해지신 분들은 문제를 풀 때마다 해당 헤더 파일을 수동적으로 입력하는 것 자체가 귀찮(?) 거나 알고리즘 자체에 집중하고 싶은 분들이 있으실 수 있다.

 

그럴 때 

#include <bits/stdc++.h>

한 줄 추가해 주시면 된다.

 

위 헤더파일에 어떠한 파일들이 포함되어 있는지 살펴보면

 

// C
#ifndef _GLIBCXX_NO_ASSERT
#include <cassert>
#endif
#include <cctype>
#include <cerrno>
#include <cfloat>
#include <ciso646>
#include <climits>
#include <clocale>
#include <cmath>
#include <csetjmp>
#include <csignal>
#include <cstdarg>
#include <cstddef>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>

#if __cplusplus >= 201103L
#include <ccomplex>
#include <cfenv>
#include <cinttypes>
#include <cstdalign>
#include <cstdbool>
#include <cstdint>
#include <ctgmath>
#include <cwchar>
#include <cwctype>
#endif

// C++
#include <algorithm>
#include <bitset>
#include <complex>
#include <deque>
#include <exception>
#include <fstream>
#include <functional>
#include <iomanip>
#include <ios>
#include <iosfwd>
#include <iostream>
#include <istream>
#include <iterator>
#include <limits>
#include <list>
#include <locale>
#include <map>
#include <memory>
#include <new>
#include <numeric>
#include <ostream>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <stdexcept>
#include <streambuf>
#include <string>
#include <typeinfo>
#include <utility>
#include <valarray>
#include <vector>

#if __cplusplus >= 201103L
#include <array>
#include <atomic>
#include <chrono>
#include <condition_variable>
#include <forward_list>
#include <future>
#include <initializer_list>
#include <mutex>
#include <random>
#include <ratio>
#include <regex>
#include <scoped_allocator>
#include <system_error>
#include <thread>
#include <tuple>
#include <typeindex>
#include <type_traits>
#include <unordered_map>
#include <unordered_set>
#endif

 

뭐가 굉장히 많은데, 기본적으로 vector, string, algorithm, map, set, stack, deque... 등등 기본적으로 알고리즘 문제 풀이에 필요한 헤더는 모두 포함되어 있다고 생각하시면 될 것 같다.

 

물론 단점도 존재한다.

 

아무래도 사용하지 않는 라이브러리까지 모두 링킹과정에 가져오기 때문에 메모리 낭비가 어느 정도 있다. 하지만 코딩 테스트의 경우 이 것 때문에 메모리 초과가 발생하는 경우는 거의 없을 거라 생각되기 때문에 편하게 문제풀이에 집중하고 싶으신 분들은 해당 파일을 include 해주면 된다.

 

* 추가로

 

해당 파일은 gcc 컴파일러에게는 기본적으로 내장되어 있는 파일이다. 즉 gcc 컴파일러 작동 환경에서는 그냥 사용하시면 되는데, 만약에 Windows os에서 visual studio 같은 에디터를 사용하시는 분들은 수동적으로 다운로드하여서 프로젝트 파일에 추가해주어야 한다.

 

stdc++.h
0.00MB

 

다음 파일을 받으셔서 bits디렉토리에 넣어주시면

#include <bits/stdc++.h>

bits 디렉토리의 stdc++.h 파일을 정상적으로 찾아서 링킹 할 수 있다.

 

*저의 글에 대한 피드백이나 지적은 언제나 환영합니다.