基本上我想做的是删除 vector 中的一些指针,但我发现在 vector 中间这样做可能会很慢。
所以我有一个 vector ,里面已经有数据了:
std::vector<Class*> vec1; // This already contains pointers
我将遍历 vec1 并将一些指针添加到另一个 vector (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());
现在我尝试生成一个新 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/