草庐IT

l_velocity_Array

全部标签

c++ - 为什么 std::array<int, 10> x 不是零初始化但 std::array<int, 10> x = std::array<int, 10>() 似乎是?

我刚刚问了两个关于数组和值初始化的问题here和here.但是有了这段代码,我迷路了:#include#include#includetemplate().at(0))>inlineUf1(constunsignedinti){Tx;returnx.at(i);}template().at(0))>inlineUf2(constunsignedinti){Tx=T();returnx.at(i);}intmain(){staticconstunsignedintn=10;staticconstunsignedintw=20;for(unsignedinti=0;i>(i);std::c

c++ - 我们可以在 C++14 中省略 std::array 的双括号吗?

我现在正在阅读C++14的标准草案,也许我的法律术语有点生疏,但我找不到任何关于允许像下面这样的初始化的内容std::arrayarr{1,2,3};合法。(编辑:显然以上是C++11中的合法语法。)目前在C++11中,我们必须将std::array初始化为std::arrayarr{{1,2,3}};//uniforminitialization+aggregateinitialization或std::arrayarr={1,2,3};我以为我在某处听说他们正在放宽C++14中的规则,以便我们在使用统一初始化时不必使用双括号方法,但我找不到实际证据。注意:我关心这个的原因是因为我目

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

valarray类看起来与array类相同,你能解释一下我在哪里更喜欢valarray而不是array反之亦然? 最佳答案 valarray已经在C++03中,array在C++11中是新的valarray是变长的,array不是。valarray专为数值计算而设计,提供了丰富的操作,包括+、-、*、cos、sin等...array没有。valarray具有检索数组切片(子数组)的接口(interface),array没有。 关于c++-std::valarray和std::array有

c++ - 我应该如何初始化 boost::array?

我正在尝试理解boostarray.code可以从作者的网站上轻松阅读。在设计原理中,作者(NicolaiM.Josuttis)提到以下两种类型的初始化是可能的。boost::arraya={{1,2,3}};//Line1boost::arraya={1,2,3};//Line2在我对g++(4.1.2版)的实验中,第1行可以正常工作,但第2行不行。(第2行产生以下内容:warning:missingbracesaroundinitializerfor'int[4]'warning:missinginitializerformember'boost::array::elems')不过

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

第一次提问:)是否可以在不破坏代码的情况下将全局c样式数组转换为std::arrays?我正在开发一个项目,其中包括反编译旧游戏的源代码。我们已经设法重构了大部分反汇编/反编译输出。由于它是自动的,因此仍然有类似的部分inta;intb[50];*(&a+100)=xxx;或intb[50];inta;*(&a-100)=xxx;还有其他类型的疯狂指针算法,尚未手动重构。但是我们想对已经(大概)正确更改为数组的部分使用边界检查。(忽略斜体字,我保留它只是为了在评论中保持一致)到目前为止,我发现一个问题是改变每个数组:sizeof(包含数组的类)会改变。例如,这可能会在某些周期内破坏代码

c++ - std::array 实例化错误

这里有一个令人尴尬的简单问题。我正在尝试使用std::array并在第一个障碍中绊倒错误...implicitinstantiationofundefinedtemplate'std::__1::array'给出错误的代码如下所示。我现在可以使用std::map解决它,但我确信修复一定很简单!!enump_t{EMPTY=0,BORDER_L//...,BORDER_BR,DATUM,NUMEL};classPlotChars{arraycharContainer;//erroronthis^line://implicitinstantiationofundefinedtemplate

c++ - 变长 std::array 像

由于我通常使用的C++编译器允许变长数组(例如,取决于运行时大小的数组),我想知道是否有类似std::array的变长数组?当然std::vector的大小是可变的,但它在堆上分配,并在需要时重新分配。我喜欢在运行时定义大小的堆栈分配数组。是否有任何可能具有此功能的std模板?也许使用具有固定最大尺寸的std::vector? 最佳答案 目前正在制定两个建议,将运行时固定大小的数组引入C++,您可能会感兴趣:Runtime-sizedarrayswithautomaticstorageduration.这将使运行时大小的数组成为一种

c++ - 为什么 std::array::size constexpr 具有简单类型(int,double,...)而不是 std::vector (GCC)?

以下代码:std::arrayarr1;std::arrayarr2;...用gcc和clang编译因为std::array::size被认为是constexpr。但以下内容不能用gcc(版本5.3.020151204)编译:std::array,4>arr1;std::array,arr1.size()>arr2;对我来说,如果第一个代码有效,则没有理由编译失败,但由于我没有找到很多关于此的帖子,我不知道它是否是gcc错误或clang扩展?gcc的错误(我不太明白...):main.cpp:Infunction'intmain()':main.cpp:6:46:error:callt

c++ - 编译时 sizeof_array 不使用宏

这只是过去几天一直困扰我的事情,我认为不可能解决,但我以前见过模板魔术。这里是:要获取标准C++数组中的元素数量,我可以使用宏(1)或类型安全的内联函数(2):(1)#definesizeof_array(ARRAY)(sizeof(ARRAY)/sizeof(ARRAY[0]))(2)templatesize_tsizeof_array(constT&ARRAY){return(sizeof(ARRAY)/sizeof(ARRAY[0]));}如您所见,第一个存在宏的问题(目前我认为这是一个问题),而另一个存在无法在编译时获取数组大小的问题;即我不会写:enumENUM{N=size

c++ - 将 C 数组分配给 C+ +'s std::array? (std::array<T,U> = T[U]) - no suitable constructor exists from "T [U ]"to "std::array<T,U>"

我正在尝试将C数组分配给C++std::array。我该如何做到这一点,最干净的方式并且不制作不需要的拷贝等?什么时候做intX[8];std::arrayY=X;我得到一个编译器错误:“不存在合适的构造函数”。 最佳答案 没有从普通数组到std::array的转换,但是您可以将元素从一个复制到另一个:std::copy(std::begin(X),std::end(X),std::begin(Y));这是一个工作示例:#include#include#include//std::copyintmain(){intX[8]={0,1