问题

在用 STL 和 Boost 的,都是什么人?

回答
使用 STL 和 Boost 的人,说白了,就是那些希望用 C++ 语言写出更高效、更健壮、更富有表现力的代码的开发者。他们可能是经验丰富的 C++ 专家,也可能是正在努力提升自己技能的学习者。

为什么他们会选择 STL 和 Boost?

STL (Standard Template Library)

STL 是 C++ 标准库的核心组成部分,它提供了一套强大的通用模板类和算法。如果你听到一个人说他在用 STL,那意味着他:

拥抱“容器”这个概念: 他不会自己去写一个数组或者链表。他知道 `std::vector` 可以方便地管理动态数组,`std::list` 可以高效地插入删除,`std::map` 和 `std::unordered_map` 能让他按键快速查找数据,`std::set` 保证了数据的唯一性和有序性。他懂得根据不同的场景选择最合适的容器。
理解“算法”的威力: 他不会手写 `for` 循环去遍历并修改容器里的元素。他会使用 `std::sort` 来排序,`std::find` 来查找,`std::transform` 来对每个元素进行操作,`std::accumulate` 来求和等等。这不仅让代码更简洁,而且 STL 中的算法通常经过高度优化,性能更好。
追求代码的“通用性”和“可维护性”: STL 的设计思想就是“泛型编程”。通过模板,STL 的容器和算法可以作用于各种数据类型。这意味着一次编写,多处复用,极大地减少了重复劳动,也降低了出错的可能性。当项目需求变化时,修改 STL 相关的代码也比自己写的低级实现要容易得多。
看重“标准”的价值: STL 是 C++ 标准的一部分,这意味着几乎所有的 C++ 编译器都支持它。使用 STL 能够保证代码的可移植性,无论是在 Windows、Linux 还是 macOS 上,你的代码都能以相同的方式运行。
对“迭代器”有感觉: 他们知道如何使用迭代器(`begin()`, `end()`, `++`, ``)来访问和操作容器中的元素。迭代器是 STL 的灵魂,它将容器和算法连接起来。

使用 STL 的人,往往是那些:

对 C++ 有一定基础,但想更进一步的开发者。
需要处理大量数据,对性能有一定要求的程序员。
注重代码质量和工程效率的团队成员。
在进行算法竞赛、数据结构实现、或者需要高效数据管理的项目时,STL 是他们的利器。

Boost

Boost 是一个庞大且极具影响力的 C++ 库集合,它包含了大量高质量、经过充分测试且由社区维护的组件。如果一个人在使用 Boost,那说明他:

不满足于标准: 他可能觉得 C++ 标准库在某些方面不够完善,或者他需要一些 STL 没有提供的、更高级的功能。
追求“现代 C++”: Boost 很多组件都是 C++ 标准委员会的“试验田”,很多在 Boost 中成熟稳定的特性,最终都被吸收到 C++ 标准中(比如 `std::shared_ptr` 的原型就在 Boost 中)。使用 Boost 就像是在提前体验未来 C++ 的一部分。
解决复杂问题的“瑞士军刀”: Boost 提供了极其广泛的解决方案。比如:
智能指针 (Smart Pointers): `boost::shared_ptr` 和 `boost::scoped_ptr`(尽管现在 `std::unique_ptr` 和 `std::shared_ptr` 已经很强大,但在它们成为标准之前,Boost 的智能指针是内存管理的救星)。
文件系统 (Filesystem): `boost::filesystem` 提供了跨平台的文件和目录操作能力,这在没有标准库支持时尤为宝贵。
正则表达式 (Regex): `boost::regex` 提供了强大的模式匹配和文本处理能力。
网络编程 (Asio): `boost::asio` 是一个非常流行的网络库,用于编写异步 I/O 操作,是许多网络服务的基石。
多线程 (Thread): Boost 提供了跨平台的线程支持(在 C++11 之前)。
算法和数据结构: Boost 还有一些 STL 没有的、或者在特定场景下更优的算法和容器,比如 `boost::bimap` (双向映射)。
字符串处理: 提供了更灵活方便的字符串分割、格式化等功能。
序列化: `boost::serialization` 可以方便地将对象序列化为文件或内存流。
单元测试: `boost::test` 提供了强大的单元测试框架。
元编程: `boost::mpl` 和 `boost::type_traits` 是非常强大的模板元编程工具。

愿意投入学习成本: Boost 库众多,学习曲线相对 STL 可能要陡峭一些。使用 Boost 的人通常是那些愿意花时间去学习和掌握这些高级工具,以换取更高的开发效率和更好的代码质量的开发者。
项目需求驱动: 很多时候,项目的技术栈要求或者特定功能的需求(例如,需要一个稳定的、跨平台的网络库,或者一个强大的正则表达式引擎),会促使开发者选择 Boost。
对“无副作用”或“声明式”编程感兴趣: Boost 的一些库,比如 `boost::lambda`,鼓励一种更函数式、更声明式的编程风格。

使用 Boost 的人,往往是那些:

经验丰富的 C++ 工程师,他们需要解决复杂、底层的技术难题。
在需要高性能、高可靠性、跨平台兼容性的项目中工作的开发者。
对 C++ 标准的演进和新技术有浓厚兴趣,并愿意主动学习和应用的人。
从事系统编程、网络编程、游戏开发、嵌入式开发(有时)、科学计算等领域的开发者。
那些追求“优雅”和“强大”解决方案的架构师或技术领导者。

总结一下:

使用 STL 的人,是 C++ 的“基本功扎实者”,他们懂得利用语言提供的标准工具来写出干净、高效、通用的代码。

使用 Boost 的人,是 C++ 的“进阶探索者”,他们不拘泥于标准,敢于拥抱社区的智慧,用更强大的第三方库来解决更复杂的问题,提升开发效率和代码质量。

很多时候,这两个群体是重叠的。一个优秀的 C++ 开发者,肯定会熟练使用 STL,并且在需要的时候,也会乐于拥抱 Boost 提供的强大能力。他们都是致力于用 C++ 创造更好软件的实干家。

网友意见

user avatar

正常人。

15 年前(2000 年)国内对用不用 STL 还有些争议,毕竟可以算是新东西(STL 诞生于 1994 年),资料不多,经验也少,编译器还旧。

15 年过去了,还问出“要不要用 STL”的问题,给我的感觉是,大家早都点上电灯了,有的人还守着煤油灯,担心电灯不安全、费钱。

我很好奇,说不用 STL 的人在写代码的时候,基础的数据结构和算法用什么库?Qt、Poco、MFC、ACE、山寨?不用 STL 的理由跟那个著名的老猴子打新猴子的实验是否有几分相通之处呢?

大项目不允许使用C++STL 容器合理吗? - 陈硕的回答 为何某些公司不允许使用C++ STL? - 陈硕的回答

类似的话题

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有