首页 > 解决方案 > 如何为 std::array 中的 std::vectors 保留内存?

问题描述

我有std::array一个固定数字 ( numLines = 4) 的std::vector; 每个std::vector将包含动态数量的元素,我知道每个std::vector( numMaxSteps = 32).

因此:

std::array<std::vector<int>, numLines> mSequences;

由于我正在以更高的速率处理音频,因此我必须在此过程中从不分配内存(因此,它会引入点击和故障)。

但我不确定如何在初始化时reserve记住每个。std::vector

有办法吗?或者我需要迭代每个项目std::array并且做.reserve(numMaxSteps)

注意我需要保持.size()在0:只.capacity()需要长大。

标签: c++vectormemory-managementstlcontainers

解决方案


从您对马歇尔回答的评论中推断:

我只需要一种“花哨”的方式来在 init 上保留内存

它没有比 IILE 更好的了:

auto mSequences = []{
  std::array<std::vector<int>, nunLines> ret;
  for (auto& v : ret)
    v.reserve(maxCapacity);
  return ret;
}();

当需要初始化 mSequences 时,lambda 将被自动调用,并且感谢 NRVO 的奇迹将直接初始化它。

它甚至可以用来初始化声明的复杂对象const

如果 IILE 的想法违反了您的编码标准,您总是可以从中创建一个命名的自由函数。


推荐阅读