草庐IT

初始化OpenStack

全部标签

c++ - 数组初始化的时间复杂度是多少?

考虑以下两种在C或C++中初始化数组的情况:案例一:intarray[10000]={0};//Allvalues=0案例二:intarray[10000];for(inti=0;i他们都需要同样的时间吗?情况1的复杂性是什么?以及,哪个更好? 最佳答案 如果数组是静态持续时间(全局变量),我会说第一个更可取,因为它不需要任何代码-它由运行时环境初始化。如果变量是automaticduration(局部变量),哪个更好,哪个好,哪个好,取决于编译器。最有可能的是,两者将非常相似。对于所有情况,自动存储持续时间变量的复杂度都是O(n)

c++ 对象初始化和构造函数语义

对象的2次初始化之间是否存在差异。Objectobj(constructor_arguments);或Objectobj=Object(constructor_arguments);请注意,第二次初始化并不是要成为带有new运算符的指针。它旨在成为非堆变量。在GCC中,两者都能正常编译和工作,我想知道是否真的存在任何差异,或者这两个语句在语义上是否相同。 最佳答案 是的。第一种是直接初始化的语法,第二种是复制初始化。理论上,第二个调用复制构造函数,但这需要优化。 关于c++对象初始化和构

c++ - 如何在类定义中初始化 vector 成员变量?

以下代码可以使用XCode5.0编译,但不能使用VisualStudio2013。#includeclassVectorInit{private:std::vectorm_vector{1,2,3};//failstocompileusingVS2013};intmain(){std::vectorvector{1,2,3};VectorInitvectorInit;return0;}这是VisualStudio报告的错误:Error1errorC2664:'std::vector>::vector(std::initializer_list,conststd::allocator&)

c++ - 为什么不能通过直接初始化语法来初始化类数据成员?

我很好奇为什么不能使用()语法初始化类的数据成员?考虑以下示例:#includeclasstest{public:voidfun(){inta(3);std::cout程序编译失败并给出以下错误。119[Error]expectedidentifierbeforenumericconstant119[Error]expected','or'...'beforenumericconstant为什么?是什么原因?C++标准对类数据成员的初始化有何规定?非常感谢您的帮助。谢谢 最佳答案 Earlyproposalsleadingtothe

c++ - 是否可以使用 n 键初始化 std::map,其中 n 是预定义的?

我想知道是否可以用nkey:value元素初始化一个std::map,其中n是预定义的(类似于数组初始化:array[n])。我不知道std::map存在这样的构造函数,但我想我可以问一下以防万一。或者,我们可以做的是:#include#includeintmain(){intn=5;std::maprandomMap;for(inti=0;i 最佳答案 当然,你可以使用初始化列表,例如intmain(){std::maprandomMap{{0,1.5},{3,2.7},{9,1.9}};for(autoconst&element

c++ - 如何使用 C++11 正确初始化 'struct stat'?

多年来,我一直像这样初始化我的structstat:#includestructstatfoo={0};具体来说,{0}将所有字段设置为零,相当于memset(&foo,NULL,sizeoffoo);。现在使用C++11,这已经开始产生警告:foo.cpp:2:19:warning:missingfield'st_mode'initializer[-Wmissing-field-initializers]structstats={0};^这是因为C++11的新初始化语法,警告暗示我没有初始化所有成员。在C++11中实例化和初始化structstat的首选方法是什么?

c++ - 我们什么时候应该使用圆括号 ( ) 与 initializer { } 语法来初始化 C++11 中的对象?

这个问题在这里已经有了答案:Whentousethebrace-enclosedinitializer?(3个答案)关闭6年前。已更新我已经通过链接(例如Whentousethebrace-enclosedinitializer?)了解何时应该使用{}大括号初始化,但没有给出何时应该使用括号()的信息与初始值设定项{}在C++11/14中初始化对象的语法?建议使用哪些标准做法()在{}?在极少数情况下,例如vectorv(10,20);或autov=vector(10,20);,结果是std::vector有10个元素。如果我们使用大括号,结果是std::vector有2个元素。但这取

c++ - C++中如何使用memset或fill_n初始化动态二维数组

我有一个动态创建的二维数组。int**abc=newint*[rows];for(uint32_ti=0;i我想用一些值(比如1)填充数组。我可以遍历每个项目并执行它。但是有没有更简单的方法。我正在尝试使用memset和std::fill_n,如thispost中所述.std::fill_n(abc,rows*cols,1);memset(abc,1,rows*cols*sizeof(int));使用memset会使我的程序崩溃。使用fill_n会产生编译错误。invalidconversionfrom'int'to'int*'[-fpermissive]我在这里做错了什么?

c++ - 为什么链接器不能防止 C++ 静态初始化顺序失败?

编辑:将下面的示例更改为实际演示SIOF的示例。我试图理解这个问题的所有微妙之处,因为在我看来它是语言中的一个主要漏洞。我读过链接器无法阻止它,但为什么会这样呢?在像这样的简单情况下防止似乎微不足道://A.hexternintx;//A.cpp#includeintx=rand();//B.cpp#include"A.h"#includeinty=x;intmain(){std::cout在这里,链接器应该能够轻松确定A.cpp的初始化代码应该在链接的可执行文件中发生在B.cpp之前,因为B.cpp依赖于A.cpp中定义的符号(链接器显然已经必须解决此引用)。那么为什么这不能推广到所

c++ - 用非零值初始化 double 组 (blas)

我已经分配了一个很大的双vector,假设有100000个元素。在我的代码中的某个时刻,我想将所有元素设置为一个常量、非零值。如果不对所有元素使用for循环,我该如何做到这一点?如果有帮助,我也在使用blas包。 最佳答案 你可以使用std::fill(#include):std::fill(v.begin(),v.end(),1);当然这本质上也只是一个循环.. 关于c++-用非零值初始化double组(blas),我们在StackOverflow上找到一个类似的问题: