티스토리 뷰
여러 경쟁적 프로그래밍 대회나 답변들을 보면 <bits/stdc++.h>가 자주 쓰이는 것을 볼 수 있다.
또한, 나는 주렁주렁 여러 헤더를 달 동안, 옆의 사람은 간단히 하나의 헤더로 끝내는 것을 보면 괜히 부럽기도 한다.
대관절 <bits/stdc++.h>는 무엇을 하는 헤더인가?
1. bits/stdc++.h을 써야 하는 이유
한 마디로 말하면 다음과 같이 말할 수 있다.
C++ 문제해결을 여행하는 여행자들을 위한 종합 선물 세트
말 그대로 C++ 알고리즘 관련 코드에서 필요한 자료형들을 모~~~~두 담고 있다고 해도 무관하다.
실제, GCC 4.8.0의 <bits/stdc++.h>는 다음과 같이 헤더를 담고 있다.
이로 인하여, C++또는 C언어에서 #include <vector.h>, #include <limits.h>, #include <set.h>... 과 같이 필요한 자료형 혹은 함수 헤더 노가다를 하지 않아도 된다.
또한, 어느 함수가 어느 헤더에 있는지 고민할 필요 없이 그냥 가져다 사용하면 된다.
마치 든든한 서포터를 옆에 두고 게임을 하는 느낌이라고 할 수 있다.
2. bits/stdc++.h을 써야 하지 말아야 하는 이유
흔히 말하는 "야매, 꼼수" 만 사용하다 보면, 정석을 잊어 버리는 경우가 왕왕 있다.
1) 애초에 정식 표준 라이브러리가 아니다.
<bits/stdc++.h>의 이름에서 알 수 있듯이 bits라는 폴더 안에 있는 "stdc++.h" 라는 헤더를 가져다 쓰는것이다. 정식 헤더가 아닌, GCC 컴파일러에서 추가된 헤더이다. 따라서, GCC가 아닌 컴파일러에서는 수동으로 헤더를 추가하거나, 이 헤더를 빼고 정식 헤더로 바꾸어주어야 한다. (ex. MSVC, XCode...)
또한, GCC 컴파일러의 구조가 달라지면 이에 맞추여 헤더의 내용을 변경해주어야 할 수도 있다.
C++ 프로그램이 어떤 환경에서 실행될 것인지 판단이 되지 않는다면 피하는 것이 좋다.
2) 느리다.
<bits/stdc++.h>가 필요한 대부분의 헤더를 담고있는 만큼, 불필요한 헤더까지 컴파일하는데 시간이 오래 걸린다. 이 점은 프로그램 실행 시간에 치명적이다.
다만, 이는 프로젝트에 따라 헤더 파일을 미리 컴파일하여 시간을 많이 단축시킬 수 있다. (Pre-compiled header)
3. 3줄 요약
1. 알고리즘 문제해결에서는 사용하면 아주 나이스하고 코딩 인생이 행복해진다.
2. 다만, 실제 개발환경에서는 쓰지 말자.
3. <bits/stdc++.h> 많이 애용해주자.
도움이 되었다면 지나가는 길에 하트 하나 눌러주세요, 양질의 글을 쓰는데 하나의 동기부여가 됩니다😍
지적이나 오타 수정 댓글 환영합니다!!
'PS 이야기 > Tips & Tricks' 카테고리의 다른 글
[C++] INF의 값은 어떤 것으로 해주는 것이 좋을까? (0) | 2022.04.20 |
---|---|
[C++] 회문(팰린드롬) 판별에 관한 모든 것 (0) | 2022.04.20 |
[C++] 여러 값 중 max, min을 찾을 때 아직도 이렇게 쓰시나요? (0) | 2022.04.14 |
[C++] <bits/stdc++.h> 헤더 쓸 때 시간 두 배 이상 줄이는 꿀팁!!!! (0) | 2022.04.05 |
[C++] 초기화 함수 fill 과 memset은 무엇이 다를까? (1) | 2022.04.04 |
- Total
- Today
- Yesterday
- react
- equal
- docker
- Python
- BOJ
- 알고리즘
- 프로그래밍
- 제어문
- Proactor
- 함수
- Network
- MIN
- CSAPP
- for
- BRONZE
- JS
- 구현
- bomblab
- 문자열
- 사칙연산
- C++
- 백준
- 헤더
- effective async
- GDSC
- C
- 시간복잡도
- Max
- 수학
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |