场景
删除vector中不符合条件的元素
方式
- std::stable_partition
实现原理:按照某种过滤规则,将vector中的元素分成两部分,前半部分是符合条件的,后半部分是不符合条件的。
具体实现:
void test1(int n)
{
vector<int> vec;
constructVec(vec, n);
clock_t start, end;
start = clock();
auto itr = std::stable_partition(vec.begin(), vec.end(), [](const int val){
return val == 0;
});
size_t delCount = std::distance(itr, vec.end());
if (delCount > 0) {
vec.erase(itr, vec.end());
}
end = clock();
cout << "useTime1: " << end - start << endl;
}
- 普通遍历删除
void test2(int n)
{
vector<int> vec;
constructVec(vec, n);
clock_t start, end;
start = clock();
for (auto itr = vec.begin(); itr != vec.end(); ) {
if (*itr != 0) {
itr = vec.erase(itr);
}else{
itr++;
}
}
end = clock();
cout << "useTime2: " << end - start << endl;
}
测试
n | std::stable_partition(ms) | 普通删除(ms) |
---|---|---|
10 | 5 | 3 |
100 | 5 | 31 |
1000 | 29 | 345 |
10000 | 428 | 7371 |
100000 | 2821 | 299872 |
1000000 | 15081 | 28778317 |