gpt4 book ai didi

c++ - c std::vector 一分为二

转载 作者:可可西里 更新时间:2023-11-01 17:37:11 25 4
gpt4 key购买 nike

是否有一种简单且运行时高效的方法可以在 C++ 中采用 std::vector<> 并将其分成两半分成另外两个 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]);
}

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

最佳答案

如果你真的需要2个 vector ,并且你不能在评论中使用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),但您不能做得更好。

如果您需要将原始 vector 分开:

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

关于c++ - c std::vector 一分为二,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13887979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com