(七)C++命名空间与标准模板库(STL)

由于没什么时间,发一篇水文,极其的短

C++命名空间(namespace)

1. 命名空间的作用
命名空间的主要目的是解决全局名称冲突的问题。在大型项目中,不同模块可能定义了相同名称的函数、变量或类。通过将这些实体分别放入不同的命名空间内,可以在全局范围内区分它们。

2. 命名空间成员访问方式

  • 显式作用域解析运算符:
    namespace MyNamespace {
        void function();
    }
    
    int main() {
        MyNamespace::function(); // 显式调用命名空间内的函数
    
  • using声明:
    namespace MyNamespace {
        void function();
    }
    
    using MyNamespace::function; // 导入特定函数到当前作用域
    int main() {
        function(); // 现在可以直接调用
    

3. using指令

  • using namespace语句用于导入整个命名空间的内容到当前作用域。尽管方便,但在头文件中使用可能会导致污染全局命名空间,增加编译错误和维护难度。
namespace MyNamespace {
    void function();
}

// 在cpp文件中使用
using namespace MyNamespace;
int main() {
    function(); // 直接调用

4. 内联命名空间
C++11引入了内联命名空间(inline namespace),它的主要特点是链接时不会创建新的作用域,而是保留原作用域,主要用于版本控制和ABI兼容性问题。

5. 匿名命名空间
匿名命名空间中的所有内容具有内部链接属性,意味着它们只在同一编译单元可见,这有助于实现文件私有数据。

C++标准模板库(STL)详解

1. STL容器
每个STL容器都有其独特的特性和适用场景:

  • std::vector:动态数组,支持随机访问,插入和删除操作可能导致元素移动。
  • std::deque:双端队列,两端均可高效地进行插入和删除操作。
  • std::list:双向链表,插入和删除操作时间复杂度恒定,但不支持随机访问。
  • std::setstd::map:基于红黑树实现,键唯一,自动排序。
  • std::multisetstd::multimap:允许键重复。
  • 以及其他如栈(stack)、队列(queue)和优先级队列(priority_queue)等适配器容器。

2. STL算法

  • 非修改序列算法:如std::find查找元素,std::count统计元素个数,std::all_of检查是否所有元素满足条件等。
  • 修改序列算法:如std::sort对序列排序,std::reverse反转序列,std::copy复制区间等。
  • 还包括如std::transformstd::accumulate等用于转换和求和等操作的算法。

3. STL迭代器
迭代器是STL的核心概念之一,它提供了访问容器内元素的一致接口,且支持多种迭代器类别:

  • 输入迭代器:只能读取元素并单向前进。
  • 输出迭代器:只能写入元素并单向前进。
  • 前向迭代器:除了输入迭代器的功能外,还可以前进后再次前进。
  • 双向迭代器:可向前或向后移动,并读写元素。
  • 随机访问迭代器:提供随机访问功能的所有迭代器,例如std::vector的迭代器。

4. 函数对象与lambda表达式

  • 函数对象(functor)是一种重载了()`操作符的对象,可以像普通函数一样被调用,常用于STL算法中作为自定义行为。
  • C++11引入了lambda表达式,它允许在代码中创建临时的、未命名的、可调用的对象,极大地简化了STL算法中自定义行为的编写。

通过深入理解和熟练运用C++命名空间和STL,开发者能够构建出更加模块化、高效且易于维护的C++程序。在实践中,结合具体业务场景选择合适的容器和算法,遵循STL的设计原则,有助于提高软件工程的质量和效率。

水到连我的格式都没有了,到时候有时间我再发一片全新的吧

  • 35
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tyz_C

你的打赏是我最大动力,感谢大家

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值