c++ - 如何就地创建+填充容器?
问题描述
我正在尝试创建一个无法复制或移动的类数组。所以我需要就地创建对象,但我不知道该怎么做:
#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
s 迭代器对构造函数来构造对象,例如
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;
};
推荐阅读
- linux - 使用 tar -xvf 解压 dd 生成的一个文件,返回成功,为什么会这样?
- tcl - 使用 Vivado 并行编程多个器件
- hibernate - 如何在 Hibernate 中按字节数组搜索?
- node.js - 在 app.js 文件中注册 Helpers 时有什么遗漏吗?
- resources - 如何在机器人框架的 .resource 文件中使用全局参数?
- python - Python Pandas:合并不能正确处理 NaN
- google-bigquery - 在 BigQuery 中使用分区运行计划查询
- list - 将列表内容从 yaml 添加到 configmap | 开班 | 期待 char '"' 但得到 char '['
- html - 如何获得令人敬畏的“图标作为项目符号”以获取属性列表样式位置:外部?
- reactjs - 显示 pdf 时没有显示 Favicon,如何使其显示?