C++ 標準庫簡介
C++ 標準
首先需要介紹的是 C++ 本身的版本。由於 C++ 本身只是一門語言,而不同的編譯器對 C++ 的實現方法各不一致,因此需要標準化來約束編譯器的實現,使得 C++ 代碼在不同的編譯器下表現一致。C++ 自 1985 年誕生以來,一共由國際標準化組織(ISO)發佈了 5 個正式的 C++ 標準,依次為 C++98、C++03、C++11(亦稱 C++0x)、C++14(亦稱 C++1y)、C++17(亦稱 C++1z)、C++20(亦稱 C++2a)。C++ 標準草案在 open-std 網站上,最新的標準 C++23(亦稱 C++2b)仍在制定中。此外還有一些補充標準,例如 C++ TR1。
每一個版本的 C++ 標準不僅規定了 C++ 的語法、語言特性,還規定了一套 C++ 內置庫的實現規範,這個庫便是 C++ 標準庫。C++ 標準庫中包含大量常用代碼的實現,如輸入輸出、基本數據結構、內存管理、多線程支持等。掌握 C++ 標準庫是編寫更現代的 C++ 代碼必要的一步。C++ 標準庫的詳細文檔在 cppreference 網站上,文檔對標準庫中的類型函數的用法、效率、注意事項等都有介紹,請善用。
需要指出的是,不同的 OJ 平台對 C++ 版本均不相同,例如 最新的 ICPC 比賽規則 支持 C++20 標準。根據 NOI 科學委員會決議,自 2021 年 9 月 1 日起 NOI Linux 2.0 作為 NOI 系列比賽和 CSP-J/S 等活動的標準環境使用。NOI Linux 2.0 中指定的 g++ 9.3.0 默認支持標準 為 C++14,並支持 C++17 標準,可以滿足絕大部分競賽選手的需求。因此在學習 C++ 時要注意比賽支持的標準,避免在賽場上時編譯報錯。
標準模板庫(STL)
STL 即標準模板庫(Standard Template Library),是 C++ 標準庫的一部分,裏面包含了一些模板化的通用的數據結構和算法。由於其模板化的特點,它能夠兼容自定義的數據類型,避免大量的造輪子工作。NOI 和 ICPC 賽事都支持 STL 庫的使用,因此合理利用 STL 可以避免編寫無用算法,並且充分利用編譯器對模板庫優化提高效率。STL 庫的詳細介紹請參見對應的頁面:STL 容器 和 STL 算法。
什麼是造輪子
造輪子(Reinventing_the_wheel)指的是重複發明已有的算法,或者重複編寫現成優化過的代碼。造輪子通常耗時耗力,同時效果還沒有別人好。但若是為了學習或者練習,造輪子則是必要的。
Boost 庫
Boost 是除了標準庫外,另一個久副盛名的開源 C++ 工具庫,其代碼具有可移植、高質量、高性能、高可靠性等特點。Boost 中的模塊數量非常之大,功能全面,並且擁有完備的跨平台支持,因此被看作 C++ 的準標準庫。C++ 標準中的不少特性也都來自於 Boost,如智能指針、元編程、日期和時間等。儘管在 OI 中無法使用 Boost,但是 Boost 中有不少輪子可以用來驗證算法或者對拍,如 Boost.Geometry 有 R 樹的實現,Boost.Graph 有圖的相關算法,Boost.Intrusive 則提供了一套與 STL 容器用法相似的侵入式容器。有興趣的讀者可以自行在網絡搜索教程。
參考資料
本页面最近更新:,更新历史
发现错误?想一起完善? 在 GitHub 上编辑此页!
本页面贡献者:OI-wiki
本页面的全部内容在 CC BY-SA 4.0 和 SATA 协议之条款下提供,附加条款亦可能应用