gpt4 book ai didi

c++ - 如何就地创建+填充容器?

转载 作者:太空狗 更新时间:2023-10-29 23:48:44 26 4
gpt4 key购买 nike

我正在尝试创建一个无法复制或移动的类数组。所以我需要就地创建对象,但我不知道该怎么做:

#include <vector>

struct Foo {
Foo(int) { }
Foo(const Foo &) = delete;
Foo & operator =(const Foo &) = delete;
Foo(Foo &&) = delete;
Foo & operator =(Foo &&) = delete;
};

struct Bla {
Bla(const std::vector<int> & args) {
for (auto i : args) {
foo.emplace_back(i);
}
}
std::vector<Foo> foo;
};

编译器提示被删除的移动构造函数,因为它不能保证所有对象都在原地构造并且从不移动。我不必使用 std::vector 作为容器,所以请随意提出其他建议。

最佳答案

您可以使用 std::vector 的迭代器对构造函数来构造像这样的对象

Bla(const std::vector<int> & args) 
: foo(args.begin(), args.end())
{}

如果您有额外的参数需要包含在构造中,那么您可以切换到任何基于节点的容器,例如 std::list

struct Bla {
Bla(const std::vector<int> & args) {
for (auto i : args) {
foo.emplace_back(i, some_other_argument);
}
}
std::list<Foo> foo;
};

关于c++ - 如何就地创建+填充容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54148433/

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