vector高效删除
1、使用erase:每次删除都要移动后面的元素
2、使用remove_if
3、stable_partition
4、运行时间比:630:1:2.5
#include <iostream>
#include <algorithm>
#include<vector>
#include<ctime>
#include<iterator>
using namespace std;
bool pass(double x) {
return x >= 60;
}
bool fail(double x) {
return x < 60;
}
int main()
{
vector<double> grades, grades_tmp, grades_tmp2;
vector<double>::iterator iter;
clock_t start, end;
for (int i = 0; i < 100000; i++) {
grades.push_back(rand() % 100);
}
grades_tmp.assign(grades.begin(), grades.end());
grades_tmp2.assign(grades.begin(), grades.end());
start = clock();
iter = grades.begin();
while (iter != grades.end()) {
if (pass(*iter))iter++;
else {
iter = grades.erase(iter);
}
}
end = clock();
cout << "erase time is:" << double(end - start) << endl;
vector<double>::iterator it2;
start = clock();
it2 = remove_if(grades_tmp.begin(), grades_tmp.end(), fail);
grades_tmp.erase(it2, grades_tmp.end());
end = clock();
/*for (auto it3 = grades_tmp.begin(); it3 != it2; it3++) {
cout << *it3 << " ";
}*/
cout << "erase time is:" << double(end - start) << endl;
start = clock();
it2 = stable_partition(grades_tmp2.begin(), grades_tmp2.end(), pass);
end = clock();
/*for (auto it3 = grades_tmp2.begin(); it3 != it2; it3++) {
cout << *it3 << " ";
}*/
grades_tmp2.erase(it2, grades_tmp2.end());
cout << "erase time is:" << double(end - start) << endl;
return 0;
}