我测下的结果,反而是push_back耗时更小些。这个明显和大家的结论不一致。
#include <vector>
#include <iostream>
#include <sys/time.h>
using namespace std;
int64_t GetSysTimeMicros()
{
timeval tv;
gettimeofday(&tv, 0);
return (int64_t)tv.tv_sec * 1000000 + (int64_t)tv.tv_usec;
}
template<typename T>
class A {
public:
A(T aa, T bb, T cc, T dd) : a(aa), b(bb), c(cc), d(dd)
{
}
void show() {
cout << a <<" "<< b << " " << c << " " << d <<endl;
}
private:
T a;
T b;
T c;
T d;
};
int main()
{
vector<A<int>> vec;
int64_t a = GetSysTimeMicros();
vec.emplace_back(1,2,3,4);
vec.emplace_back(2,2,3,4);
vec.emplace_back(3,2,3,4);
vec.emplace_back(4,2,3,4);
int64_t b = GetSysTimeMicros();
cout << "vec: time consume of emplace_back is: " << b - a << endl;
vector<A<int>> vec2;
a = GetSysTimeMicros();
vec2.push_back(A<int>(1,2,3,4));
vec2.push_back(A<int>(2,2,3,4));
vec2.push_back(A<int>(3,2,3,4));
vec2.push_back(A<int>(4,2,3,4));
b = GetSysTimeMicros();
cout << "vec2: time consume of push_back is: " << b - a << endl;
vector<A<int>> vec3;
A<int> aa(1,2,3,4);
A<int> bb(2,2,3,4);
A<int> cc(3,2,3,4);
A<int> dd(4,2,3,4);
a = GetSysTimeMicros();
vec3.push_back(aa);
vec3.push_back(bb);
vec3.push_back(cc);
vec3.push_back(dd);
b = GetSysTimeMicros();
cout << "vec3: time consume of push_back II is: " << b - a << endl;
vector<A<string>> vec4;
a = GetSysTimeMicros();
vec4.emplace_back("aaaaaaaaaaaaaaaa", "bbbbbbbbbbbbbbbbb", "ccccccccccccccc", "dddddddddddddddddddddddddd");
vec4.emplace_back("aaaaaaaaaaaaaaaa", "bbbbbbbbbbbbbbbbb", "ccccccccccccccc", "dddddddddddddddddddddddddd");
vec4.emplace_back("aaaaaaaaaaaaaaaa", "bbbbbbbbbbbbbbbbb", "ccccccccccccccc", "dddddddddddddddddddddddddd");
vec4.emplace_back("aaaaaaaaaaaaaaaa", "bbbbbbbbbbbbbbbbb", "ccccccccccccccc", "dddddddddddddddddddddddddd");
b = GetSysTimeMicros();
cout << "vec4: time consume of emplace_back is: " << b - a << endl;
vector<A<string>> vec5;
a = GetSysTimeMicros();
vec5.push_back(A<string>("aaaaaaaaaaaaaaaa", "bbbbbbbbbbbbbbbbb", "ccccccccccccccc", "dddddddddddddddddddddddddd"));
vec5.push_back(A<string>("aaaaaaaaaaaaaaaa", "bbbbbbbbbbbbbbbbb", "ccccccccccccccc", "dddddddddddddddddddddddddd"));
vec5.push_back(A<string>("aaaaaaaaaaaaaaaa", "bbbbbbbbbbbbbbbbb", "ccccccccccccccc", "dddddddddddddddddddddddddd"));
vec5.push_back(A<string>("aaaaaaaaaaaaaaaa", "bbbbbbbbbbbbbbbbb", "ccccccccccccccc", "dddddddddddddddddddddddddd"));
b = GetSysTimeMicros();
cout << "vec5: time consume of push_back is: " << b - a << endl;
return 0;
}
运行结果:
vec: time consume of emplace_back is: 3
vec2: time consume of push_back is: 1
vec3: time consume of push_back II is: 1
vec4: time consume of emplace_back is: 13
vec5: time consume of push_back is: 4