c++ - 在容量范围内调整矢量大小时的性能影响
问题描述
我的代码有以下综合示例:
#include <vector>
#include <array>
#include <cstdlib>
#define CAPACITY 10000
int main() {
std::vector<std::vector<int>> a;
std::vector<std::array<int, 2>> b;
a.resize(CAPACITY, std::vector<int> {0, 0})
b.resize(CAPACITY, std::array<int, 2> {0, 0})
for (;;) {
size_t new_rand_size = (std::rand() % CAPACITY);
a.resize(new_rand_size);
b.resize(new_rand_size);
for (size_t i = 0; i < new_rand_size; ++i) {
a[i][0] = std::rand();
a[i][1] = std::rand();
b[i][0] = std::rand();
b[i][1] = std::rand();
}
process(a); // respectively process(b)
}
}
所以很明显,数组版本更好,因为它需要更少的分配,因为数组的大小是固定的并且在内存中是连续的(对吗?)。它只是在容量范围内再次调整大小时重新初始化。
由于无论如何我都要覆盖,我想知道是否有一种方法可以跳过初始化(例如通过覆盖分配器或类似方法)以进一步优化代码。
解决方案
由于无论如何我都要覆盖,我想知道是否有办法跳过初始化
是:不要调整大小。相反,保留容量并推动(或安置)新元素。
推荐阅读
- java - 如何在 Selenium Java 中使用 cookie 绕过登录?
- docker - 如何从 docker 多阶段构建中检索或查看构建/测试工件/结果?
- mysql - 组合 MySQL 表中的 2 列以创建具有特定字符串的新列
- hyperledger-fabric - 需要传播给至少 1 个同行,但只知道 0 个符合条件的同行
- r - 在dplyr中分组时如何获取实例数
- python - 三阶多项式拟合误差太大?
- java - 在循环中模拟覆盖 when() 行为
- google-apps-script - Google Apps 脚本:多个用户点击 doGet 和 doPost 脚本,变量会混淆吗?
- powershell - 输出文件并保留格式
- xcode - Xcode 11.5:除了一台机器(Pod 链接期间的“-LL”目录前缀)之外,开发团队中的每个人都可以构建?