我有一个结构
typedef struct myStruct {
std::vector<std::vector<int>> something;
std::complex<double> const &x;
std::complex<double> const &y;
unsigned int const z;
unsigned int const w;
unsigned int const m;
} myStruct;
然后我基于这种类型的结构创建了一个双端队列:
std::deque<myStruct> deq;
现在,我想填充一个新函数,向这个双端队列添加一个新条目:
void newFunction(...){
deq.insert(...);
}
如何填充此函数,向我的双端队列添加一个新条目,即 myStruct 类型?我的问题是我在结构类型中有一些引用,但不知道该怎么做。
谢谢
最佳答案
你的类型 myStruct
没有构造函数——不是你声明的(因为你没有)也不是编译器为你合成的(因为它无法知道如何).
当然可以使用聚合初始化创建该类型的对象,这是您留给自己的唯一途径:
std::complex<double> x, y;
myStruct obj = {{}, x, y, 1, 2, 3};
您现在应该能够从中复制构造一个双端队列元素:
deq.push_back(obj);
但是在该类型具有构造函数之前,您将无法使用 emplace_back
就地构造。
您可以使用emplace_back
调用合成的移动构造函数:
deq.emplace_back(std::move(obj));
但您仍然需要适合您的类型的构造函数。
此外,由于 myStruct
包含 const
成员,因此它不可复制赋值。为此,以及其他一些原因,该类型的设计不适合在标准容器中使用。
而且我对在对象中存储“原始”引用然后将该对象放入容器中感到紧张。是什么确保这些引用的有效性?
最后,停止使用不必要的 typedef
习语。这是我们在 1820 年代用 C 语言所做的事情,这样我们就可以在任何地方调用 myStruct
而不是 struct myStruct
类型;在 C++ 中,myStruct
是一个类,您可以直接命名它而无需任何技巧。有时,当他们的类也需要包含到 C 源代码中时,人们会坚持使用 typedef
技巧,即为了兼容性,但使用 std::vector
和 std: :complex
成员你肯定不会那样做。
关于c++ - 将条目添加到双端队列 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52832078/