+3

Có nên sử dụng #include<bits/stdc++.h> trong C++ hay không?

Nếu là dân competitive programming sử dụng C++ để code, chắc hẳn cậu đã từng "ồ", "wow", hú hét khi được khai sáng với thư viện <bits/stdc++.h> 🤩

Chữ "bits/" chính là tên thư mục chứa file "stdc++.h"

Nếu cậu đã từng xem source code của file stdc++.h, cậu sẽ thấy trong này gồm rất nhiều những câu lệnh #include các thư viện chuẩn trong C++ như iostream, string, vector, stack, queue, ...

bitsstdcpp.png

Điều này đồng nghĩa với việc, chỉ với 1 dòng #include<bits/stdc++.h>, cậu sẽ không còn phải nhớ và khai báo nhiều thư viện khi muốn sử dụng các hàm khác nhau nữa

Việc này đặc biệt hữu ích khi chúng ta đang tham gia các cuộc thi lập trình thi đấu, nơi mà mọi người cần tập trung nhiều hơn vào việc tìm ra thuật toán để giải quyết vấn đề một cách hiệu quả, thì rõ ràng <bits/stdc++.h> sẽ giúp anh em tiết kiệm được rất nhiều thời gian và hạn chế lỗi thiếu thư viện khi code

Tuy nhiên, bước ra khỏi những cuộc thi này, đặc biệt là đến khi đi làm, việc sử dụng <bits/stdc++.h> lại không được khuyến khích

1. Tăng thời gian biên dịch

Bình thường khi cần dùng hàm của thư viện nào, chúng ta chỉ cần include thư viện đó, thì trình biên dịch sẽ thực hiện nhanh chóng.

Nhưng khi sử dụng <bits/stdc++.h>, trong header file này include rất nhiều những thư viện chuẩn của C++, tức là bao gồm cả những thư viện mà trong chương trình của chúng ta không cần dùng đến. Do đó, thời gian biên dịch sẽ lâu hơn

Đặc biệt là khi làm việc với những project lớn, thường xuyên phải code-run-test, mà biên dịch chương trình còn lâu nữa chắc chắn sẽ khiến cho anh em developer vô cùng khó chịu 🤬

2. Một số trình biên dịch không hỗ trợ

Vì <bits/stdc++.h> chỉ là một phần của GNU C++ Standard Library (libstdc++), được sử dụng trong trình biên dịch GCC (GNU Compiler Collection), chứ không phải một thư viện chuẩn trong C++, nên các cậu sẽ có thể gặp lỗi khi build chương trình trên những trình biên dịch khác nhau

3. Tóm lại

Khi đi thi lập trình thi đấu, cậu có thể dùng <bits/stdc++.h>, nó không làm chương trình của cậu chạy chậm đi so với include từng thư viện đâu, chỉ làm chậm thời gian biên dịch thôi. Mà lập trình thi đấu thì đâu có chấm thời gian biên dịch đúng không nè 🤗

Oái oăm lắm thì có chăng là trường hợp cuộc thi mà các cậu tham gia sử dụng trình biên dịch trên máy chấm điểm không hỗ trợ <bits/stdc++.h>. Nhưng trường hợp này rất hiếm gặp, bản thân mình cũng chưa gặp bao giờ

Thế còn sau này đi làm dự án thì không nên dùng bits/stdc++ nha, bị các anh gõ cho u đầu đó 🥴

Hi vọng kiến thức này hữu ích với cậu. Hẹn gặp lại 👋


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí