use*_*952 8 c++ arrays split runtime vector
是否有一种简单且运行时有效的方法来在c ++中获取std :: vector <>并将其分成两半其他向量?
因为现在我这样做:
std::vector<> v1, v2;
for(int i = 0; i < vector.size(); i++)
{
if(i < vector.size()/2) v1.push_back(vector[i]);
else v2.push_back(vector[i]);
}
Run Code Online (Sandbox Code Playgroud)
在O(n)时间运行,这是我必须经常执行的操作.那么还有更好的方法吗?
Ben*_*ley 12
如果你真的需要2个向量,你不能在评论中使用GMan的建议:
// where v1 is your original vector
std::vector<T> v2(
std::make_move_iterator(v1.begin() + v1.size()/2),
std::make_move_iterator(v1.end()));
v1.erase(v1.begin() + v1.size()/2, v1.end());
Run Code Online (Sandbox Code Playgroud)
它仍然是O(n),但你不能做得更好.
如果您需要将原始矢量分开:
std::vector<T> v2(v1.begin(), v1.begin() + v1.size()/2),
v3(v1.begin() + v1.size()/2, v1.end());
Run Code Online (Sandbox Code Playgroud)