欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > C++11QT复习 (十五)

C++11QT复习 (十五)

2025/7/7 14:34:51 来源:https://blog.csdn.net/m0_49013185/article/details/147054489  浏览:    关键词:C++11QT复习 (十五)

文章目录

    • Day10 标准模板库学习笔记(2025.04.02)
      • 一、函数和数组能否放入 STL 容器?
        • 1. 引用不能直接作为容器元素类型
          • ✅ 推荐做法:使用 `std::reference_wrapper<T>`
        • 2. 函数不能直接作为容器元素类型
        • ✅ 推荐做法一:使用函数指针类型
        • ✅ 推荐做法二:使用 `std::function`
        • 补充知识:函数和数组的“衰变”行为
      • 二、数组能否放入容器?
        • ❌ 直接存放原生数组类型 `T[N]` 不被支持
        • ✅ 推荐做法一:使用数组指针
        • ✅ 推荐做法二(更推荐):使用 `std::array`
      • 三、测试代码
      • 四、总结
        • 实践建议

Day10 标准模板库学习笔记(2025.04.02)

一、函数和数组能否放入 STL 容器?

1. 引用不能直接作为容器元素类型

C++ 的容器如 std::vector 不支持存储引用类型(例如 int&),因为引用并非对象本身,不能被复制或赋值。

std::vector<int&> rv; // ❌ 编译失败
✅ 推荐做法:使用 std::reference_wrapper<T>

标准库提供了 std::reference_wrapper 类模板,它可以将引用包装为对象,从而实现“间接”存储引用。

#include <functional>
std::vector<std::reference_wrapper<int>> rv1;
rv1.push_back(i); // i 是 int 类型变量

你也可以自定义类似的封装类,但通常没必要:

template <typename T>
class my_reference_wrapper {T& r;
public:my_reference_wrapper(T& i) : r(i) {}
};
2. 函数不能直接作为容器元素类型

函数名本身不是对象,而是函数类型,不能直接作为 std::vector 的元素类型。

std::vector<decltype(add)> fv; // ❌ 编译失败
✅ 推荐做法一:使用函数指针类型

函数名在赋值或传参时会自动“衰变”(decay)为函数指针。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词