gpt4 book ai didi

c++ - 有效地填充已知大小的 vector

转载 作者:行者123 更新时间:2023-11-30 02:26:28 25 4
gpt4 key购买 nike

我想创建一个 std::vector<int>已知大小并立即用一些生成的值填充它。有没有一种方法可以做到这一点,而无需 (1) 首先将 vector 零填充到所需的大小或 (2) 使用 reserve然后push_back在每个元素上?

例如,要用值 0 填充 vector size-1 :

// method 1
vector<int> fill_resize(int s) {
vector<int> v(s);
for (int i = 0; i < s; i++) {
v[i] = i;
}
return v;
}

// method 2
vector<int> fill_push_back(int s) {
vector<int> v;
v.reserve(s);
for (int i = 0; i < s; i++) {
v.push_back(i);
}
return v;
}

方法(1)冗余填零浪费时间,方法(2)需要push_back的机器在每个插入上,实际上编译很差。

在有人插嘴说“编译器很聪明,他们会为你优化这个!”之前- check out the generated assembly关于前沿编译器 -O2 .这很糟糕,push_back变体以可怕的方式吃蛋糕1


1有趣的是,可怕的 push_back版本仍然适用于非常大的 vector ,因为在那里你主要受内存带宽的限制,而方法 1 的先零后填充方法占用带宽的 2 倍。 push_back方法至少只循环一次值,但使用慢循环。

最佳答案

你可以:

关于c++ - 有效地填充已知大小的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42841707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com