Gab*_*ins 5 c++ performance c++11
基本上我想要做的是删除向量中的一些指针,但我发现在向量中间执行它可能会很慢.
所以我有一个已经包含数据的向量:
std::vector<Class*> vec1; // This already contains pointers
我将遍历vec1并将一些指针添加到另一个向量(vec2): vec2.push_back(vec1.at(index))
现在我想做的就是这样,vec1 = vec2但我不知道这是否是更好(有效)的方式.
最好的方法是什么?
我试过了:
在循环浏览vec1时,只需删除我需要从中删除的内容:
it = vec1.erase(it)
循环通过vec1将最后一项移动到实际索引和poping_back
vec1.at(index) = vec1.back();
vec1.pop_back();
在循环浏览vec1而不是使用时,在指针指向的对象上设置一些属性 std::remove_if
vec1.erase(std::remove_if(vec1.begin(), vec1.end(), shouldBeRemoved), vec1.end());
现在我正在尝试生成一个新的向量,同时循环通过vec1并添加我想要保留的指针,然后"交换"或"移动"这个新向量的内容到vec1.
显然,当第四种方式,指针失效:(
我很乐意看到你们的建议我.非常感谢愿意帮助的每个人!
您可以仅用于std::remove_if有条件地从向量中删除项目。该算法会将需要保留的项目移到前面。随后调用std::vector::erase 实际删除未移到前面的项目。
这与您的选项 3 类似,但您不需要首先设置属性 - 只需使用谓词来确定是否应保留该项目,并避免必须传递向量两次。
如果您不想就地执行此操作,而是想填充新向量,则std::copy_if可以这样做。
| 归档时间: |
|
| 查看次数: |
188 次 |
| 最近记录: |