草庐IT

VT_ARRAY

全部标签

c++17 有效地将参数包参数与 std::array 元素相乘

我想有效地将​​参数包中的参数与std::array的元素相乘:intindex(auto...Is,std::arraystrides){//pseudo-code//intidx=0;//for(inti=0;i我无法完全理解这个问题。我开始沿着索引序列的道路前进,但我可以弄清楚如何合并求和。我使用的是c++17,所以如果折叠表达式可以简化代码,那么折叠表达式是公平的游戏。感谢您的指点。编辑:澄清了伪代码。唯一的伪部分是表达式Is[i]它指的是第i个参数包参数。下面T.C.的回答是完美的,这是我的最终代码,它是一个成员函数:unsignedintindex(auto...index

c++ - 接口(interface)设计: safety of overloaded function taking string and char array

假设我们有一个类可以写入输出内容classWriter{public:intwrite(conststd::string&str);intwrite(constchar*str,intlen);//...};我对这个、它的灵active以及所有这些都很好,直到我意识到char*buf=newchar[n];//notterminatedwith'\0'//loadupbufWriterw;w.write(buf);//compiles!那是一个真的讨厌的错误。我们可以通过一些模板进行一些修改classWriterV2{public:intwrite(conststd::string&s

c++ - 在其他类中实现类似 std::array 的构造函数

在我使用过的所有现代C++编译器中,以下是合法的:std::arraya={1,2,3,4};我正在尝试创建我自己的具有相似构造语义的类,但我遇到了一个恼人的问题。考虑以下尝试:#include#includetemplateclassfloat_vec{private:std::arrayunderlying_array;public:templatefloat_vec(Types...args):underlying_array{{args...}}{}};intmain(){float_vecv={1,2,3,4};//errorhere}当像上面那样使用int文字时,编译器会提

c++ - 为什么 std::array 不包含初始化列表构造函数

这个问题在这里已经有了答案:Braceelisioninstd::arrayinitialization(2个答案)关闭6年前。为了初始化一个std::array对于某些值,您需要使用这种方法:std::arrayan_array{{3,4,5}};我知道我们需要两个大括号的原因(一个用于std::array,另一个用于内部c-stylearray)。我的问题:为什么,按照标准,std::array不包含直接初始化内部c-stylearray的初始化列表构造函数?初始化为:std::arrayan_array{3,4,5};编辑:此信息来自http://en.cppreference.

c++ - 我对为 std::array 赋值的方式有一些疑问

我正在codedsope.com上学习C++,并且我在另一个网站learncpp.com上阅读了一份文档。但是这两个网站给数组赋值的方式不同。//codesdope.comstd::arrayn{{1,2,3,4,5}};//learncpp.comstd::arrayn={1,2,3,4,5};哪种方式更准确?我应该选择哪种方式?它们有什么区别? 最佳答案 CWG1270之前的C++11中需要双括号(修订后的C++11以及C++14及更高版本中不需要)://constructionusesaggregateinitializati

c++ - 初始化枚举类类型的二维 std::array (C++11)

我在C++11中有以下类:classMyTable{public:enumclassEntryType{USED,FREE};MyTable(EntryTypevalue){for(uint32_ti=0;i,10>_table;}尝试构造一个值为EntryType::FREE的MyTable对象,二维数组中的每一项的值为0x01010101(每8位1b),而不是预期值0x1我猜这与我的value被转换为int有关,但我不知道我应该怎么做才能修复它。 最佳答案 memset()预计会以这种方式工作,因为它是setseachbyteo

c++ - 在类中初始化 boost::multi_array

首先我想说我是新手。我正在尝试初始化boost:multi_array在我的类(class)里。我知道如何创建boost:multi_array:boost::multi_arrayfoo(boost::extents[1000]);但作为类(class)的一部分,我遇到了问题:classInflux{public:Influx(uint32_tnum_elements);boost::multi_arrayfoo;private:};Influx::Influx(uint32_tnum_elements){foo=boost::multi_array(boost::extents[n

c++ - 如何遍历一个boost::multi_array

我一直在研究boost::multi_array库,以寻找一个允许您在单个for循环中遍历整个multi_array的迭代器。我不认为那个库中有任何这样的迭代器。(在那里找到的迭代器可以让你遍历multi_array的一个维度)我错了吗?如果没有,是否有任何库定义了这样一个迭代器?进入细节,我想写这样的东西:boost::multi_arrayma(boost::extents[3][4][2]);for(my_iteratorit=ma.begin();it!=ma.end();++it){//dosomething//here*ithaselementtype(inthiscase

c++ - 构造不可复制对象的 "array"

我有一个本质上不可复制的类(一个线程,所以没有有意义的复制语义),我想要一个大的“数组”,用非默认构造函数相同地构造。请注意,该数组是固定大小的。我只能对C++数组使用默认构造函数,除非我单独初始化每个数组。ThreadmyArray[128];//usesdefaultconstructor-wrong我可以显式地列出对象的构造函数和参数,但那样冗长且难看ThreadmyArray[128]={Thread(params,...),Thread(params,...),...x128;//ugly我似乎不能使用STLvector,因为该对象是不可复制的-虽然vector永远不会改变大

c++ - SSE3 内在函数 : How to find the maximum of a large array of floats

我有以下代码来查找最大值intlength=2000;float*data;//dataisallocatedandinitializedfloatmax=0.0;for(inti=0;imax){max=data;}}我尝试使用SSE3内在函数对其进行矢量化,但我对应该如何进行比较感到有些吃惊。intlength=2000;float*data;//dataisallocatedandinitializedfloatmax=0.0;//fortimebeingjustassumethatlengthisalwaysmod4for(inti=0;i谁能给出一些想法。