【发布时间】:2013-06-22 15:18:28
【问题描述】:
C++11 给了我们很棒的std::array,它需要在编译时知道大小:
std::array<int, 3> myarray = {1, 2, 3};
现在,我碰巧有一些旧的 short* 缓冲区要包装,它们的大小只有在运行时才能知道(当然也知道)。
C++14 将定义 std::dynarray 来涵盖这种情况,但 dynarray 在 GCC 4.7 和 Clang 3.2 中尚不可用。
那么,有没有人知道与std::array 相当的容器(在效率方面)但不需要在编译时指定大小?我怀疑 Boost 已经为我准备好了一些东西,尽管我找不到任何东西。
【问题讨论】:
-
为什么不是 std::vector?
-
动态能力是重量级的,这里不需要。我需要一个固定大小的容器,很像一个普通的旧 C 数组,但附加了一些元数据并能够迭代。
-
您仍然可以使用 std::vector 和 reserve() 提前您需要的大小。这样您在插入时就不会受到调整大小的影响。
-
我删除了你的 C++14 标签。 This meta question 达成共识,等到最终标准草案发布后再使用它而不是 C++1y。
-
在 C++14 存在之前说“C++14 will”的问题在于,C++14 还不存在:-S