c++ - 如何为 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()
需要长大。
解决方案
从您对马歇尔回答的评论中推断:
我只需要一种“花哨”的方式来在 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 的想法违反了您的编码标准,您总是可以从中创建一个命名的自由函数。
推荐阅读
- reactjs - gh-pages 在“运行部署”上失败
- kubernetes - 无法使 RBAC 在 Minikube 上工作:确保您的网络清单支持 RBAC
- android - 如何在 Android 中通过 POI 库正确插入图像?当我插入图像时,EXCEL 无法读取文件。“Excel 在...中发现不可读的内容”
- php - require(): 无法打开所需的 '../vendor/autoload.php' (include_path='.:/usr/share/php')
- python - 如果 scapy_packet.haslayer(scapy.Raw).load: AttributeError: 'int' object has no attribute 'load'
- intellij-idea - intellij IDEA:SASS 文件中的未知函数
- python - Pandas:根据单独列的值更新多列和多行
- ios - 使用 Swift 在 iOS 中创建自定义步数指示器
- go - 将字符串转换为浮点数会丢失精度吗?
- c++ - Gtkmm 中的非阻塞信号处理程序