modern cpp learning(二)

modern cpp learning(二)

💡 原文中文,约16500字,阅读约需40分钟。
📝

内容提要

本文介绍了现代C++中的容器、智能指针和正则表达式。常用容器包括std::vector、std::list和std::deque,适用于不同场景。智能指针如std::shared_ptr和std::unique_ptr简化了内存管理,避免内存泄漏。正则表达式用于字符串匹配和处理,C++11引入了标准库支持,提升了开发效率。

🔎

延伸解读

容器选择:从场景出发

文章列举了多种容器,但选择的关键在于场景。std::vector适合随机访问,std::list适合频繁插入删除,std::deque适合头尾操作。std::array固定大小,比vector更节省内存,且不会自动扩容。无序容器如std::unordered_map基于哈希表,平均O(1)复杂度,但元素无序;有序容器基于红黑树,O(log n)但自动排序。理解这些差异有助于写出更高效的代码。

智能指针:所有权与循环引用

智能指针通过引用计数管理内存,但shared_ptr可能因循环引用导致内存泄漏。文章示例中两个对象互相持有shared_ptr,引用计数无法归零。weak_ptr不增加引用计数,可打破循环。unique_ptr独占所有权,只能通过std::move转移,转移后原指针为空。这些特性要求开发者明确所有权关系,避免悬空指针。

正则表达式:标准库支持与模式

C++11将正则表达式纳入标准库,不再依赖boost。文章介绍了普通字符、特殊字符、限定符等语法,以及std::regex_match和std::smatch的使用。正则表达式可用于检查、替换和提取子串。但需注意,正则表达式性能可能不如手写解析,且复杂模式可读性差。合理使用能提升字符串处理效率。

❓

Q&A

现代C++中有哪些常用的容器?

常用的容器包括std::vector、std::list、std::deque、std::set、std::unordered_set、std::map、std::unordered_map、std::stack和std::queue。

智能指针在现代C++中有什么作用?

智能指针如std::shared_ptr和std::unique_ptr简化了内存管理,避免了内存泄漏。

C++11引入的正则表达式有什么用?

正则表达式用于字符串匹配和处理,能够检查子串、替换匹配的子串以及提取符合条件的子串。

std::vector和std::array有什么区别?

std::vector是动态数组,大小可变,而std::array是固定大小的数组,适合在大小已知的情况下使用。

如何使用std::shared_ptr管理内存?

使用std::make_shared创建对象并返回std::shared_ptr,引用计数为零时自动释放内存。

C++中的正则表达式是如何实现的?

C++11引入了正则表达式库,通过std::regex进行模式匹配,使用std::regex_match检查字符串。

🏷️

标签

➡️

继续阅读