连接两个std :: vector - 哪种方法更有效,怎么/为什么?

Cin*_*out 3 c++ performance concatenation stdvector

请考虑以下情形:

std::vector<int> A;
std::vector<int> B;
std::vector<int> AB;
Run Code Online (Sandbox Code Playgroud)

我希望AB有相同顺序A的内容和内容B.

方法1:

AB.reserve( A.size() + B.size() ); // preallocate memory
AB.insert( AB.end(), A.begin(), A.end() );
AB.insert( AB.end(), B.begin(), B.end() );
Run Code Online (Sandbox Code Playgroud)

方法2:

std::vector<int> AB ( A.begin(), A.end() ); // calling constructor
AB.insert ( AB.end(), B.begin(), B.end() );
Run Code Online (Sandbox Code Playgroud)

以上哪种方法效率更高?为什么?是否有更高效的不同方法?

Dav*_*eas 8

第一个可能更有效,因为您可以保证只执行一次内存分配.在第二个中,很可能(大多数实现都是)A.size()在向量构造期间完成分配,然后在insert需要按B.size()元素增长时触发第二个分配.