C++:为 std::vector 分配内存,然后并行初始化其元素

戴维维

我有一个用例来创建std::vector具有许多元素的 ,每个元素都是简单但非原始的类型(POD 结构)。向量和类型足够大/复杂,在下面,

std::vector<U> v;
v.resize(1000000000);
for(size_t i=0;i<v.size();++i){/* initialize v[i] */}

resize呼叫是明显减慢。这很浪费,因为resize默认初始化所有这些条目,然后我循环遍历并将它们全部设置为正确/有用的值。

我想做的是为向量分配所有内存,但不初始化任何条目,然后并行执行并初始化所有条目,例如使用 OpenMP

std::vector<U> v;
v.reserve(1000000000);
#pragma omp parallel for
for(size_t i=0;i<v.size();++i){/* initialize v[i] */}

但是,reserve实际上并没有改变 的大小v,所以我必须继续push_back在我的循环中进行,这不会保持元素的正确顺序(这在我的用例中很重要);我真的很想v[i] = ...在我的循环体中写一些类似的东西

有没有办法在不初始化任何元素的情况下分配/“初始化”一个向量,然后并行填充/初始化所有元素?

理查德

您的选择是:

执行调整大小后,您可以按常规方式使用 OpenMP。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从C样式数组初始化std :: vector?

std :: vector和内存分配

初始化值为std :: vector的std :: map的最佳方法是什么?

使用另一个元素和额外元素的内容初始化C ++(11)std :: vector

std :: vector类成员的初始化

将元素从std :: vector复制到std :: stack C ++

C ++-为std :: vector <double>创建新的构造函数吗?

如何在C ++ 11中初始化std :: vector的值列表?

参加std :: vector C ++

C ++ std :: vector清除所有元素

为什么C ++会用零初始化std :: vector而不初始化std :: array?

C ++-vector <>中的std :: unique_ptr为nullptr

如何在c ++ 11中初始化std :: vector <std :: string>的静态constexpr成员?

C ++中std :: vector的内存问题

C ++将静态成员std :: array元素初始化/填充为特定值

为什么不能在C ++中为std :: vector的字符串文字初始值设定项列表创建std :: vector <std :: string>?

如何默认初始化std :: vector

在对象初始化之前访问C ++ std :: vector对象成员

在结构中初始化std :: vector

std :: vector初始化的模板参数

将std :: vector调整为小于其初始保留容量的值将擦除数据

初始化std :: string的std :: vector

该标准是否保证std :: vector占用的总内存可缩放为C + N * sizeof(T)?

初始化空的std :: vector C ++时出现分段错误

高效的std :: vector的直接初始化

如何在构造时为std :: vector保留内存?

std::vector 的 C++ struct 内存布局

C++ - 构造函数中的 std::vector 初始化

在 C++ 中的 std::vector 中初始化大小值时出错