c++ - 将条目添加到双端队列 C++

标签 c++ populate deque

我有一个结构

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::vectorstd: :complex 成员你肯定不会那样做。

关于c++ - 将条目添加到双端队列 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52832078/

相关文章:

c++ - STL deque::insert() 的复杂性

c++ - 从 MATLAB 到 C++ : equivalent of bwmorph with option 'remove'

c++ - 如何比较 vector 字符串中的字符串中的字符?

c++ - 是否存在 stb_image simd 支持?

asp.net - 使用数据集设计器创建的数据集中的数据集数据填充 ASP.Net 下拉列表

python - 如何将双端队列一分为二

c++ - 迭代器与指针的双端队列插入失效(引用)

c++ - 将文件映射多线程化为缓冲区数组

c# - 在 Word 文档模板中填充表格 C#

jquery - 动态填充列表 (jQuery)