알고리즘 문제를 풀고있는 요즘 바킹독 선생님의 영상과 문제 풀이를 많이 참고하고 있다. 바킹독 선생님의 풀이를 보면 include를 <bits/stdc++.h
>를 사용하여 한 번에 끝내신다. 여기에는 알고리즘 문제를 해결하기 위해 주로 사용하는 헤더들을 모두 include하고 있다. 이 헤더파일은 gcc 계열의 컴파일러에 미리 내장되어 있고, 그래서 대부분의 문제풀이 사이트에서 위 헤더파일을 사용할 수 있다. 하지만 윈도우 기반인 나는 visual studio를 사용하고, visual studio는 기본적으로 <bits/stdc++.h>
를 포함하고 있지 않기 때문에 따로 설정을 해줘야 한다.
그 전에 간단하게 장단점을 살펴보면
장점
- 자주 사용되는 라이브러리를 include 해주기 때문에 일일이 추가해야하는 번거로움이 적다.
단점
- 사용하지 않거나 불필요한 라이브러리도 컴파일하기 때문에 시간이나 공간이 낭비될 수 있다.
- GNU C++ 라이브러리의 표준 헤더가 아니기 떄문에, GCC가 아닌 다른 컴파일러로 빌드하려고 하면 실패한다.
먼저 아래 파일을 다운받도록 하자.
설치할 때 경로를 따로 설정해주지 않았다면 visual studio가 설치되어 있는 위치는 다음과 같다.(visual studio 2019 기준)
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29910\include
위 폴더에는 지금까지 내가 하나 하나 include 했던 iostream부터 algorithm, vector등의 헤더파일이 모두 존재한다.
여기에 폴더를 생성하고 이름을 bits로 해준 뒤 이 폴더 안에 앞에서 다운 받은 stdc++.h 파일을 넣어주면 끝이다.
참고로 <bits/stdc++.h> 헤더파일의 내용은 다음과 같다. 일반적으로 사용하는 헤더파일은 모두 include 하기 때문에 알고리즘 문제를 풀 때 더 수월하게 작성할 수 있다.
// 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