问题标签 [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.
c++ - 如何在不直接提供大小的情况下使用初始化列表创建 std::array
我怎样才能a3
编译?
在使用初始化列表时,对数组的大小进行硬编码是非常不方便且脆弱的,尤其是长列表。有什么解决办法吗?我希望如此,否则我会很失望,因为我讨厌 C 数组并且std::array
应该是它们的替代品。
arrays - std::array vs C-array vs std:vector
我想在我的程序中替换std::vector
为std::array
,所以我继续测试:
好吧,输出很奇怪 -std::array
比 C-array 慢 3 倍,甚至比vector
. 没有应用优化,唯一的标志是-std=c++11
. 有什么问题?
c++ - 创建一个在运行时计算大小的 std::array
我想创建一个对象,std::array<T, N>
但问题是我只能使用返回constexpr
类型的函数,否则编译器会抱怨。这里的问题是我需要根据另一个数组的大小来计算这个数组的长度,可能是这样的:
我怎样才能转换这个函数的输出,以便我可以使用它来代替N
?
c++ - 带有 static_assert 的 constexpr std::array
使用gcc 4.8.2
和4.9.1
using编译时g++ test.cpp --std=c++11
,编译成功。然而,当编译clang 3.4
和3.5
使用clang++ test.cpp --std=c++11
时,编译失败:
所以我的问题是,在符合 C++11 的意义上,哪个编译器是“正确的”?而且,如果clang
是正确的,那么为什么 std::arrayoperator[]
不能使用 constexpr?这不是std::array
应该帮助解决的事情之一吗?
c++ - 我应该如何大括号初始化 std::pairs 的 std::array?
VS2013 错误:
错误 C2440:“正在初始化”:无法从“int”转换为“std::pair”没有构造函数可以采用源类型,或者构造函数重载决议不明确`
我究竟做错了什么?
c++ - 具有私有构造函数和自身静态数组的类
对不起,如果标题令人困惑,我找不到一个简单的方法来用一个简单的句子来写它。无论如何,我面临的问题:
该getThatThing
函数旨在从查找表中返回一个实例。
我不能使用std::array
of Something
,除非我在课堂上添加一个公共 ctor SomeThing()
。它适用于旧式数组,我可以定义数组,并在SomeThing::generateLookupTables()
函数中填充它。显然该类型std::array<SomeThing, 64>
没有构造函数。关于如何使其工作的任何想法,或者这个概念的更好结构?
============= 编辑 =======
这种friend std::array<SomeThing, 64>
方法似乎是个好主意,但是:
它也将用于其他地方的数组中。我想保证这个类总是对外部用户保持某些不变量。使用这个友好的数组,用户可能会意外地创建一个未初始化的SomeThing
.
此外,查找表是使用相当复杂的过程生成的,不能按内联方式完成,如std::array<SomeThing, 64> SomeThing::lookup_table_0(some value)
c++ - 使用 std::array 创建树
底部的代码会生成以下编译时错误。std::vector<Node>
如果我使用or ,错误就会消失std::array<unique_ptr<Node>, 3>
。有人可以解释一下这是什么吗?
在 main.cpp:1:0 中包含的文件中:/usr/include/c++/4.9/array:在 'struct std::array' 的实例化中:main.cpp:9:23:
此处需要 /usr/include/ c++/4.9/array:97:56: 错误: 'std::array<_Tp, _Nm>::_M_elems' 类型名称不完整 _AT_Type::_Type _M_elems; ^ main.cpp:3:7: 错误:“类节点”类节点的前向声明
c++ - 原始数组比 std::array 有什么优势吗?
根据这个关于原始数组与 std::vector的问题的公认答案,原始数组的优点(早在 2010 年)是:
- 数组稍微紧凑一些:大小是隐式的
- 数组是不可调整大小的;有时这是可取的
- 数组不需要解析额外的 STL 头文件(编译时)
- 使用数组与直接 C 代码交互会更容易(例如,如果 C 正在分配并且 C++ 正在使用)
- 固定大小的数组可以直接嵌入到结构或对象中,这可以提高内存局部性并减少所需的堆分配数量
据我所知, std::array 解决了除第三点之外的所有问题。
所以除非我迫切需要改进我的编译时间,有没有理由在 C++11 中使用原始数组而不是 std::array ?
c++11 - 我可以使用 const & 作为 constexpr 函数的参数吗?
CArray T(&)(N)
我正在编写一个使用 a或 a的 constrexpr 函数std::array
。我想我必须编写 2 个函数(如果你知道得更好,我会很高兴知道),
但我担心我用 std::array 写的东西
编写 constreexpr 函数以通过 const & 传递时是否正确?
我认为这应该是因为在编译时编译器会实例化一个副本,并且在编译时没有 L 值的概念。
有人可以解释一下吗?
c++ - “除了默认构造的数组不为空”是什么意思?
在 N3337 中,我正在阅读 §23.3.2.1/3,它指出:
An
array
满足容器和可逆容器 (23.2) 的所有要求,除了默认构造的array
对象不是空的并且交换没有恒定的复杂性。
在 §23.2.1,表 96 容器要求中,它显示了一个默认构造对象X u;
,其中后置条件为u.empty()
。那么大概是以下几点:
应该导致a.empty()
输出1
,它确实如此。那么这里的“空”是什么意思呢?