C++11&QT复习 (十五)

文章目录

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

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

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

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

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

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

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

#include 
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)为函数指针。

 
 

你可能感兴趣的:(QT_C++,c++,qt,开发语言)