c++ - 如何将所有指针从一个 vector 移动到另一个 vector ?

标签 c++ performance c++11

基本上我想做的是删除 vector 中的一些指针,但我发现在 vector 中间这样做可能会很慢。

所以我有一个 vector ,里面已经有数据了:

std::vector<Class*> vec1; // This already contains pointers

我将遍历 vec1 并将一些指针添加到另一个 vector (vec2):vec2.push_back(vec1.at(index))

现在我想做的是 vec1 = vec2但我不知道这是否是更好(有效)的方法。

最好的方法是什么?

我试过:

  1. 虽然遍历 vec1 只是删除我需要从中删除的内容:

    it = vec1.erase(it)

  2. 在遍历 vec1 时将最后一项移动到实际索引并 poping_back

    vec1.at(index) = vec1.back(); vec1.pop_back();

  3. 在循环遍历 vec1 时在指针指向的对象上设置一些属性,而不是使用 std::remove_if

    vec1.erase(std::remove_if(vec1.begin(), vec1.end(), shouldBeRemoved), vec1.end());

  4. 现在我尝试生成一个新 vector ,同时循环遍历 vec1 并添加我想要保留的指针,然后将这个新 vector 的内容“交换”或“移动”到 vec1。

显然,当以第 4 种方式执行时,指针会失效 :(

我很想看看你们给我的建议。非常感谢所有愿意提供帮助的人!

最佳答案

你可以只使用std::remove_if有条件地从 vector 中删除项目。该算法会将需要保留的项目移到前面。用 std::vector::erase 跟进调用以实际删除未移到前面的项目。

这与您的选项 3 类似,但您不需要先设置属性 - 只需使用谓词来确定是否应保留该项目,并避免必须传递 vector 两次。

如果你不想在原地做,但想填充一个新的 vector ,那么 std::copy_if这样做。

关于c++ - 如何将所有指针从一个 vector 移动到另一个 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51743424/

相关文章:

mysql - WHERE 与 HAVING 具有多个 IF/LIKE 的计算字段

performance - Web 应用程序的电池效应?

c++ - 类中的 static const std::array

c++ - void init(Handle<Object> exports) 中的 <Object> 是什么

c++ - 读取二进制文件时输出不一致

java游戏在更快的cpu上口吃

c++ - C++ 中 f(g(), h()) 的求值顺序

C++堆组织——哪种数据结构?

c++ - 如何在 boost::gil 中使用 alpha channel 调整 png 图像的大小

c++ - 汇编消息 : no such instruction when Compiling C++