c std :: vector分为两部分

时间:2012-12-15 00:05:40

标签: c++ arrays vector split runtime

是否有一种简单且运行时有效的方法来获取std :: vector<>在c ++中,将它分成两半进入另外两个向量?

因为我现在正在这样做:

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]);
}

在O(n)时间内运行,这是我必须经常执行的操作。那么还有更好的方法吗?

1 个答案:

答案 0 :(得分: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());

它仍然是O(n),但你不能做得更好。

如果您需要将原始矢量分开:

std::vector<T> v2(v1.begin(), v1.begin() + v1.size()/2),
               v3(v1.begin() + v1.size()/2, v1.end());