Có một trang web Stack Exchange được gọi là Lập trình Câu đố & Code Golf . Các câu đố lập trình trên trang web đó phù hợp với định nghĩa của câu đố này :
một món đồ chơi, vấn đề, hoặc một kế hoạch khác được thiết kế để giải trí bằng cách đưa ra những khó khăn cần được giải quyết bằng sự khéo léo hoặc nỗ lực kiên nhẫn.
Chúng được thiết kế để giải trí, và không phải theo cách mà một lập trình viên làm việc có thể bị thích thú bởi một vấn đề trong thế giới thực gặp phải trong công việc hàng ngày của họ.
Mã Golf là "một loại cuộc thi lập trình máy tính giải trí, trong đó những người tham gia cố gắng đạt được mã nguồn ngắn nhất có thể thực hiện một thuật toán nhất định." Trong các câu trả lời trên trang web PP & CG, bạn sẽ thấy mọi người chỉ định số lượng byte trong câu trả lời của họ. Khi họ tìm ra cách để loại bỏ một vài byte, họ sẽ xóa số ban đầu và ghi lại số mới.
Như bạn có thể mong đợi, phần thưởng chơi golf mã lạm dụng ngôn ngữ lập trình cực đoan. Tên biến một chữ cái. Không có khoảng trắng. Sử dụng sáng tạo các chức năng thư viện. Tính năng không có giấy tờ. Thực hành lập trình không chuẩn. Những vụ hack kinh hoàng.
Nếu một lập trình viên gửi yêu cầu kéo tại nơi làm việc có chứa mã kiểu golf, nó sẽ bị từ chối. Đồng nghiệp của họ sẽ cười nhạo họ. Người quản lý của họ sẽ ghé qua bàn của họ để trò chuyện. Mặc dù vậy, các lập trình viên tự giải trí bằng cách gửi câu trả lời cho PP & CG.
Điều này có liên quan gì stdc++.h
? Như những người khác đã chỉ ra, sử dụng nó là lười biếng. Nó không khả dụng, vì vậy bạn không biết liệu nó sẽ hoạt động trên trình biên dịch của bạn hay phiên bản tiếp theo của trình biên dịch. Nó nuôi dưỡng những thói quen xấu. Nó không chuẩn, vì vậy hành vi của chương trình của bạn có thể khác với những gì bạn mong đợi. Nó có thể tăng thời gian biên dịch và kích thước thực thi.
Đây là tất cả các phản đối hợp lệ và chính xác. Vậy tại sao mọi người sẽ sử dụng sự quái dị này?
Nó chỉ ra rằng một số người thích câu đố lập trình mà không có mã golf . Họ gặp nhau và cạnh tranh tại các sự kiện như ACM-ICPC, Google Code Jam và Facebook Hacker Cup hoặc trên các trang web như Topcoder và Codeforces. Thứ hạng của họ dựa trên tính chính xác của chương trình, tốc độ thực hiện và tốc độ họ gửi giải pháp. Để tối đa hóa tốc độ thực hiện, nhiều người tham gia sử dụng C ++. Để tối đa hóa tốc độ mã hóa, một số trong số họ sử dụng stdc++.h
.
Đây có phải là một ý tưởng tốt? Hãy kiểm tra danh sách các nhược điểm. Tính di động? Không thành vấn đề vì các sự kiện mã hóa này sử dụng một phiên bản trình biên dịch cụ thể mà các thí sinh biết trước. Tuân thủ tiêu chuẩn? Không liên quan đến một khối mã có tuổi thọ hữu ích dưới một giờ. Biên dịch thời gian và kích thước thực thi? Đây không phải là một phần của phiếu điểm của cuộc thi.
Vì vậy, chúng ta còn lại với những thói quen xấu. Đây là một phản đối hợp lệ. Bằng cách sử dụng tệp tiêu đề này, các thí sinh sẽ tránh được cơ hội tìm hiểu tệp tiêu đề chuẩn xác định chức năng họ đang sử dụng trong chương trình của họ. Khi họ viết mã trong thế giới thực (và không sử dụng stdc++.h
), họ sẽ phải dành thời gian tìm kiếm thông tin này, điều đó có nghĩa là họ sẽ làm việc kém hiệu quả hơn. Đó là nhược điểm của việc luyện tập với stdc++.h
.
Điều này đặt ra câu hỏi tại sao nó đáng tham gia vào lập trình cạnh tranh nếu nó khuyến khích các thói quen xấu như sử dụng stdc++.h
và vi phạm các tiêu chuẩn mã hóa khác. Một câu trả lời là mọi người làm điều đó vì lý do tương tự họ đăng các chương trình trên PP & CG: một số lập trình viên thấy thú vị khi sử dụng các kỹ năng mã hóa của họ trong bối cảnh giống như trò chơi.
Vì vậy, câu hỏi về việc có nên sử dụng stdc++.h
hay không là liệu tốc độ mã hóa có mang lại lợi ích trong một cuộc thi lập trình có vượt qua các thói quen xấu mà người ta có thể phát triển bằng cách sử dụng nó hay không.
Câu hỏi này hỏi: "Tại sao tôi không #incolee <bits/stdc++.h>
?" Tôi nhận ra rằng nó đã được hỏi và trả lời để đưa ra quan điểm và câu trả lời được chấp nhận nhằm mục đích là Câu trả lời đúng cho câu hỏi này. Nhưng câu hỏi không phải là "Tại sao tôi không #incolee <bits/stdc++.h>
trong mã sản xuất?" Do đó, tôi nghĩ thật hợp lý khi xem xét các kịch bản khác trong đó câu trả lời có thể khác nhau.
using namespace std;
ngoài đó ở đâu đó.