gpt4 book ai didi

C++,在函数内部从一对中删除一个元素

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

我正在使用 C++,我有一个成对变量 vector ,第一个元素是一个 vector ,第二个元素是一个整数。我的问题是我试图从此 vector 中删除某些元素,但似乎无法让它工作!

代码如下所示,一切都按我预期的那样工作:

vec1.erase(i);

因为我可以从 vector 中计算出一些其他相关变量到屏幕,它们是正确的。

compareVecs 只是这个类的一个元素,比较一些变量。

void myCode::PairRemoval(vector<myTypeDef> &vec1, const vector<myTypeDef> &vec2, double conditionMax) {
bool condition=false;
for (unsigned int i=0; i<vec1.size(); i++){
for (unsigned int j=0; j<vec2.size(); j++){
if (vec1[i].first.compareVecs(vec2[j].first) <= conditionMax) {
condition = true;
break;
}
}
if (condition) {
vec1.erase(i);
cout<<"removed"<<endl;
}
}
}

如果满足条件,我希望从这个 vector 中删除对。

在此先感谢您的帮助!

最佳答案

erase 的问题是它会删除您指向的元素,同时还会更改 vector 的大小。它的效率非常低,因为 vector 需要将每个后续元素都复制下来。因此,如果您有 15 个元素并删除第一个元素,那么您现在只复制了 14 个元素。

你可以通过使用

来解决这个问题
for(vector<whatever>::iterator foo = myVector.begin(); foo != myVector.end(); ++foo){
if( myPredicate( foo ) ){
foo = myVector.erase(foo);
}
}

但正如我所说,它的效率非常低。如果需要删除每个元素,这可能需要 O(N^2) 时间。

相反,使用 copy-and-swap 技术:

vector<T> myNewVector;
copy_if( myOldVector.begin(), myOldVector.end(), back_inserter(myNewVector), fun_ptr(myPredicate) );
myOldVector.swap(myNewVector);

关于C++,在函数内部从一对中删除一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4984412/

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