以O(1)的时间复杂度删除未排序std::vector中的元素
How to do it...
#include <iostream> #include <vector> #include <algorithm>int main(){ std::vector<int> v{123, 456, 789, 100, 200};quick_remove_at(v, 2); for (int i : v){ std::cout << i << ", "; } std::cout << '\n';quick_remove_at(v, std::find(std::begin(v), std::end(v), 123)); for (int i : v) { std::cout << i << ", "; } std::cout << '\n'; }template <typename T> void quick_remove_at(std::vector<T> &v, std::size_t idx) {if (idx < v.size()) { v[idx] = std::move(v.back()); v.pop_back(); } }template <typename T> void quick_remove_at(std::vector<T> &v, typename std::vector<T>::iterator it) {if (it != std::end(v)) {*it = std::move(v.back()); v.pop_back(); } }$ ./main 123, 456, 200, 100, 100, 456, 200,
How it works...

Last updated