vector 用 insert 批量插入效率高还是emplace_back效率高
#include <vector>
#include <iostream>
#include <chrono>
#define CHECK_TIME_START std::chrono::steady_clock::time_point start = std::chrono::steady_clock::now();
#define CHECK_TIME_END \
std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now(); \
std::chrono::duration<double> time_span = std::chrono::duration_cast<std::chrono::duration<double>>(end - start); \
std::cout << "Time Cost: " << time_span.count() << " seconds." << std::endl;
int main() {
std::vector<int> source(100000, 33);
std::vector<int> tar1;
std::vector<int> tar2;
{
CHECK_TIME_START
for (size_t i = 0; i < 1000000; i++) {
tar1.emplace_back(source[i]);
}
CHECK_TIME_END
}
{
CHECK_TIME_START
tar2.insert(tar2.end(), source.begin(), source.end());
CHECK_TIME_END
}
}
Results:
Time Cost: 0.0131269 seconds.
Time Cost: 9.8033e-05 seconds.
可以看出insert批量插入效率更高
如果将tar1,提前申请好内存空间,再看下
{
CHECK_TIME_START
tar1.reserve(1000000);
for (int i = 1000000; i >= 0; --i) {
tar1[i] = source[i];
}
CHECK_TIME_END
}
Results:
Time Cost: 0.00603038 seconds.
Time Cost: 0.000147077 seconds