gpt4 book ai didi

c++ - 将 vector> move 到 vector>

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:12:56 25 4
gpt4 key购买 nike

我有两个类,比如说 BaseDerived: public Base和两个 std::vector s,一个类型为 unique_ptr<Base> 的元素另一个包含 unique_ptr<Derived> 类型的元素如何将所有元素的所有权从第二个 vector 转移到第一个 vector 中?我已经尝试过:

vector<unique_ptr<Base>> v1;
vector<unique_ptr<Derived>> v2;
// do something
std::move(v2.begin(),v2.end(),v1.begin()); // This line crashed
v1 = std::move(v2); // And this gives a compiler error

最佳答案

在进入之前,您需要确保 v1 的大小合适。例如:

#include <algorithm>
#include <vector>
#include <memory>

using std::vector;
using std::unique_ptr;

struct Base {
};

struct Derived : Base {
};

int main()
{
vector<unique_ptr<Base>> v1;
vector<unique_ptr<Derived>> v2;
v2.push_back(unique_ptr<Derived>(new Derived));
v2.push_back(unique_ptr<Derived>(new Derived));
v2.push_back(unique_ptr<Derived>(new Derived));
v1.resize(v2.size());
std::move(v2.begin(),v2.end(),v1.begin());
}

这是因为 move 算法不会改变容器本身的大小。它是这样实现的(取自 http://en.cppreference.com/w/cpp/algorithm/move ):

template<class InputIt, class OutputIt>
OutputIt move(InputIt first, InputIt last, OutputIt d_first)
{
while (first != last) {
*d_first++ = std::move(*first++);
}
return d_first;
}

关于c++ - 将 vector<unique_ptr<Derived>> move 到 vector<unique_ptr<Base>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23980227/

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