问题标签 [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 投票
3 回答
7695 浏览

c++ - std::valarray 和 std::array 有什么区别

valarray班级看起来和班级一样,你能解释一下array我更喜欢哪里吗?反之亦然?valarrayarray

0 投票
1 回答
503 浏览

c++ - 指向 std::array 成员的指针

假设我有一个结构,其中包含另一个结构类型的对象数组,如下所示:

是否可以可移植地编写一个表达式,该表达式将评估给定数组元素的给定属性的指向成员的指针?像&bar::foos[2]::x什么?

该应用程序是embind:如果可能,我想将这样的嵌套 C++ 类型映射到线性 JavaScript 元组。如果使用指向成员的指针不起作用,那么我可能会尝试使用 getter 和 setter 方法,但我仍然想知道是否有办法获得这样的指向成员的指针。

0 投票
3 回答
3386 浏览

c++ - 从 C 样式数组到 std::array 的转换对于数组来说是完全安全的吗?

第一次提问者:) 是否可以在不破坏代码的情况下将全局 c 样式数组转换为 std::arrays ?我正在开发一个项目,其中包括反编译旧游戏的源代码。我们已经设法重构了大部分反汇编/反编译输出。由于它是自动的,因此仍然有类似的部分

或者

以及剩余的其他类型的疯狂指针算法,尚未手动重构。但是我们想对已经(大概)正确更改为数组的部分使用边界检查。

忽略斜体文本,我保留它只是为了在评论中保持一致到目前为止,我发现每个数组都有一个问题:sizeof(class containing array)会改变。这可能会在某些循环中破坏代码,例如 someclass somearray[100]; //例如 (sizeof(somearray[0]) == 50) 为真 int pointer = (int)somearray; 指针 += 100 ((someclass )pointer)->doSomething(); . 因为pointer +=100不会指向第二个元素,而是第一个元素,甚至第零个元素,我不确定(不要忘记它是自动反编译的代码,因此很丑)。

我正在考虑将每个全局数组更改为 std::array 以及在没有[]运算符 to的情况下访问数组的每个实例array._Elems

如果我在这样的代码中将全局数组更改为 std::arrays 是否会出现任何问题?

编辑 关于尺寸不变,你是对的。我在测试功能中有错误。所以我将扩展问题:

将每个 c 样式数组更改为 std::array 是否安全?

编辑 我们当前的代码实际上只能在调试模式下运行,因为它不会移动变量。发布模式基本上在程序开始时崩溃。

编辑 由于这个问题似乎有些混乱,让我澄清一下:除了 T elems [N] 之外,是否有一些保证数组中没有其他成员?我可以指望拥有

并确保 ptr 指向varname[1][0]而不考虑实现细节?尽管可以保证数组是连续的,但我对此不确定。该标准包含一个实现,但我不确定这是一个示例实现还是每个实现都应该遵守的实际定义,迭代器和 const_iterator 是唯一特定于实现的东西,因为只有那些有实现定义的词(我手头没有最新的规范,因此可能存在一些其他差异)。

0 投票
5 回答
283 浏览

c++ - 不需要内存空间的 C++ 零大小数组?

在声明模板类的成员变量时,有没有办法根据某些模板参数的值使其需要零内存?

一个例子是定义类似的东西std::array<T,n>,当n==0.

例如:

有没有办法消除 optional_args 的开销num_optional_args==0

大多数std::array<T,n>为一个元素保留空间的实现,T即使n==0.

还有另一种方法可以保留零空间吗?为什么这不是 C++ 标准的一部分?

0 投票
6 回答
79283 浏览

c++ - 将未知大小的 std::array 传递给函数

在 C++11 中,我将如何编写一个采用已知类型但未知大小的 std::array 的函数(或方法)?

在我的搜索过程中,我只发现了使用模板的建议,但这些建议看起来很混乱(标题中的方法定义)并且对于我想要完成的事情来说太过分了。

有没有一种简单的方法来完成这项工作,就像使用普通的 C 样式数组一样?

0 投票
1 回答
298 浏览

c++ - C 样式数组的替代方案有多可行?

既然我们有了std::array,std::vector和大括号初始化,还需要 C 风格的数组吗?

0 投票
2 回答
2605 浏览

templates - C++11 返回一个不同大小的 std::array

我想创建这样一个结构:

我知道

是不同的结构,所以这是不可能的。我怎样才能以不同的方式管理它?我必须byte_t*从方法返回吗?

0 投票
2 回答
6948 浏览

c++ - 是 std::array作为类成员零初始化?

问题:

  1. c.stdArr零初始化的吗?
  2. 如果是 - 为什么?

我自己矛盾的答案:

  1. 它是零初始化的: std::array想要表现得像一个 c 数组。如果在我上面的示例stdArr中是一个 c 数组,它将stdArr()在初始化列表中被初始化为零。我希望member()在初始化列表中写入会初始化对象。

  2. 它不是零初始化的:

    • std::array通常只有一个成员,就我而言int[10] _Elems;
    • 通常基本类型和基本类型数组int[N]都不是默认初始化的。
    • std::array是一个聚合类型,这意味着它是默认构造的。
    • 因为没有初始化的自定义构造函数_Elems,我认为它不是零初始化的。

std::array根据 C++11 标准,正确的行为是什么?

0 投票
2 回答
1261 浏览

c++ - 如何在 gdb 中打印 `std::array` 内容?

我对 gdb 不是很熟悉,并且不知道如何在 gdb 手册中查找这种情况。

我正在尝试打印std::arraygdb 中的内容。下面是我试图在 gdb 中调试的用例。

在此函数中,我尝试打印p v1. 它打印(const mosp::Point<2u> *) 0x7fffffffc150。如何打印的内容v1

0 投票
3 回答
165 浏览

c++ - 无法复制从默认构造的数组构造的对象

在花费 1 或 2 个小时来隔离编译错误后,该编译错误被元编程混乱所包围,生成糟糕的编译消息,这里有一个最小且简单的示例来说明我的问题:

这是用 g++ 4.8.1 编译的,我不明白为什么当我尝试复制而不是复制时编译cda抱怨b.

这是错误: