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)
以上哪种方法效率更高?为什么?是否有更高效的不同方法?
第一个可能更有效,因为您可以保证只执行一次内存分配.在第二个中,很可能(大多数实现都是)A.size()在向量构造期间完成分配,然后在insert需要按B.size()元素增长时触发第二个分配.