问题标签 [stdarray]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3797 浏览

c++ - std::array 和字节读取

我已经阅读了很多关于在 C++ 中不使用 C 风格的内容,而是使用 std::array、std::vector 或 std::string 等容器。

现在我正在尝试使用文件流读写小型二进制文件并将其存储在 std::array 中。

看起来 std::fstream 中的 read 和 write 方法只能用于 C 样式的数组...

所以这就是我的想法:

byte_t 只是一个

有用。但这是做到这一点的好方法吗?如果没有,还有什么其他方法可以做到这一点?我应该改用 byte_t [] 吗?

0 投票
1 回答
2817 浏览

c++ - 在类构造函数中初始化类的 std::array

我正在尝试在另一个类的构造函数中初始化一个 std::array 对象。似乎聚合初始化应该在这里工作,但我想不出合适的语法。我该怎么做呢?

0 投票
3 回答
112 浏览

c++ - 来自 std::array 的读取范围

如何接受可能具有不同维度的 std::array ?这应该在编译时知道,但以下内容不起作用

我也知道 end-start == n 所以它也可能以某种方式被模板化。

0 投票
2 回答
2168 浏览

c++11 - 是否可以将 std::array 移动到 std::vector 中?

这是一个关于堆栈内存和堆内存的交互以及通过std::arraystd::vector类从堆栈到堆的特殊情况的问题。

原则std::array<T>上可以看作是指向第一个元素的指针,加上一些关于数组大小的编译时信息。是否有可能让std::vector<T>构造函数考虑到这一事实并尝试通过复制指针将 的内容移动array到just 中。vector

一个用例是,一个函数返回一个std::array<double, >

std::array<double, 20> fun(){...};

但后来决定将其分配给 astd::vector而无需逐个元素复制。

std::vector<double> v = fun(); // not working code

现在必须做

这实际上做了一些多余的工作,如果可能的话,这些工作就没有必要了std::vector<double> v(std::move(tmp)); \\ not working code

std::vector和的内存布局std::array是一样的,所以不是和障碍。

我知道主要障碍可能是std::array元素在堆栈中,而std::vector元素在堆中。很明显,即使编写移动构造函数,std::vector堆栈中的内存仍将被不可撤销地破坏。

所以我想这个问题也可以理解为:

有没有办法将内存从堆栈移动到堆(无论这意味着什么),如果它可以与移动构造函数结合使用?

或者,如果原则上std::vector可以有一个来自 a 的移动构造函数?std::array

MWE:

0 投票
1 回答
1818 浏览

c++ - 在编译时将 std::array 的每个元素相乘

我想将一个转换std::array为另一个std::array,将它的每个元素乘以一个特定的数字。

我现在所拥有的显然不起作用:

我的问题是:如何在编译时迭代每个元素,或者如何在编译时应用相同的函数(在我的例子中:乘以 2)?

0 投票
2 回答
107 浏览

c++ - 这个片段有什么问题?

我不知道这个片段有什么问题。我收到此错误:

错误:成员函数“swap”不可行:“this”参数的类型为“const array”,但函数未标记为 const

getArrElement没有返回const数组。auto应该推导出来,std::initializer_list但我也认为这没有什么害处。

怎么了?

0 投票
0 回答
59 浏览

c++11 - C++11 GCC 5.1.1 数组必须使用大括号括起来的初始化程序进行初始化

字符串的这种初始化std::array失败:

来自 gcc 5.1.1 的错误消息是:

编辑:这种形式的初始化也失败了:

编辑2:只有这种形式有效:

0 投票
1 回答
593 浏览

c++ - boost::spirit 用 std::array 解析成结构

我正在使用 boost::spirit 将文本解析为包含固定大小数组的结构。在遵循示例时

qi/boost_array.cpp

并尝试使用它来解析包含 std::array (或 boost::array)的结构,我认识到由于BOOST_FUSION_ADAPT_STRUCT的工作原理,我必须将助手result_of::adapt_array< some_array_type >::type放在结构也是如此。

我认为应该可以使用BOOST_FUSION_ADAPT_ADT创建一个包装器,但只是为了摆脱结构中的小适配器开销似乎有点过头了。由于我没有很多实例,从记忆的角度来看,我可以忍受它,但它也会引入一些噪音。

我还认为可以创建一个从数组类型派生的适配器,而不是封装它以隐藏一些噪音,但它会迫使我改变所有现有的结构,并且它会将解析器开销泄漏到外部,这不是很好的解决方案。

是否有一些明显的问题我正在接近错误,或者确实存在新的助手,它们在后台路由开销以便可以将它们封装在解析器中?

我知道 使用 std::array 作为 boost::spirit::x3 的属性

现场示例

这是我当前的代码:

0 投票
2 回答
643 浏览

c++ - 用一对 std::arrays c++11初始化映射

我想编译这些行。插入以映射一对 std::arrays。

0 投票
2 回答
264 浏览

c++ - 为什么常量变量有时不被视为编译时常量

我试图执行两种不同的场景:

场景一:

在这里,arraySize 被视为编译时间常数,因此它在 std::array 中是允许的。

场景二:

在方案 2 中,尽管 arrySize 是 sz 的常量副本,但仍不将 arraySize 视为编译时间常量。

为什么这两种情况被区别对待?