gpt4 book ai didi

c++ - 多次 push_back vector 的快速方法

转载 作者:太空宇宙 更新时间:2023-11-04 14:40:59 34 4
gpt4 key购买 nike

我发现了我的 C++ 代码中的瓶颈,我的目标是加快它的速度。如果条件为真,我会将项目从一个 vector 移动到另一个 vector 。

在 python 中,执行此操作的 pythonic 方法是使用列表理解:

my_vector = [x for x in data_vector if x > 1]

我已经破解了一种在 C++ 中执行此操作的方法,并且工作正常。但是,我在 while 循环中调用了数百万次,而且速度很慢。我不太了解内存分配,但我认为我的问题与使用 push_back 反复分配内存有关。有没有办法以不同方式分配我的内存以加速此代码? (在 for 循环完成之前,我不知道 my_vector 应该有多大)。

std::vector<float> data_vector;
// Put a bunch of floats into data_vector
std::vector<float> my_vector;

while (some_condition_is_true) {
my_vector.clear();
for (i = 0; i < data_vector.size(); i++) {
if (data_vector[i] > 1) {
my_vector.push_back(data_vector[i]);
}
}
// Use my_vector to render graphics on the GPU, but do not change the elements of my_vector
// Change the elements of data_vector, but not the size of data_vector
}

最佳答案

使用std::copy_if ,并最初为 my_vector 保留 data_vector.size()(因为这是您的谓词可以评估为真的元素的最大可能数量):

std::vector<int> my_vec;
my_vec.reserve(data_vec.size());
std::copy_if(data_vec.begin(), data_vec.end(), std::back_inserter(my_vec),
[](const auto& el) { return el > 1; });

请注意,如果您希望谓词计算为真的次数远小于 data_vector 的大小,则可以避免在此处调用 reserve .

关于c++ - 多次 push_back vector 的快速方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39936463/

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