草庐IT

stdarray

全部标签

C++ 性能 std::array 与 std::vector

晚上好。我知道C风格数组或std::array并不比vector快。我一直使用vector(而且我用得很好)。但是,在某些情况下,使用std::array比使用std::vector性能更好,我不知道为什么(使用clang7.0和gcc8.2测试)。让我分享一个简单的代码:#include#include//somesizeconstantconstsize_tN=100;//somevectorsandarraysusingvec=std::vector;usingarr=std::array;//arraysareconstructedfasterhereduetoknownsiz

c++ - std::array::max_size 和 std::array::size 给出不同结果的示例

每当我尝试使用std::array的max_size()和size()函数时,我都会得到相同的结果,我想知道是否会出现其中两个给出不同结果的情况。 最佳答案 该函数的存在是为了与std::vector等其他容器兼容。对于std::array,这两个值将始终相同。 关于c++-std::array::max_size和std::array::size给出不同结果的示例,我们在StackOverflow上找到一个类似的问题: https://stackoverfl

c++ - std::array<char, N> 的大小是多少?

这个问题在这里已经有了答案:Isthesizeofstd::arraydefinedbystandard(1个回答)关闭8年前。C++标准对sizeof(std::array)有何规定?应该是(对于某个常量N)?在commenttoadifferentquestion中,有人提到std::array并不总是“堆栈分配”。该评论是对另一条评论的回应,该评论推测为std::array设置了一个太大的常量。声明为局部变量的变量可能会由于“堆栈分配”变量的资源不足而导致程序中止。我假设后续评论意味着std::array是可能的以某种方式切换到动态分配模式。我可以想象,可能会有某种SFINAE可

c++ - std::大小为零的数组

std::array是什么意思?,大小为零的数组?在发布之前,我已经在SO中解决了类似的问题,所有这些问题是关于简单数组类型和C语言的,他们中的大多数人说这是非法的。但在C++中array是允许的。根据cppreference.comThereisaspecialcaseforazero-lengtharray(N==0).Inthatcase,array.begin()==array.end(),whichissomeuniquevalue.Theeffectofcallingfront()orback()onazero-sizedarrayisundefined.为什么不定义为非法

c++ - 为什么二维 std::array 不能用两层列表初始化器初始化?

有人能帮我理解为什么我的编译器不能/不能推断出这个吗?(使用g++7.3)不起作用:#includestd::array,2>f(){return{{0,0},{0,0}};}工作正常:#includestd::array,2>f(){return{std::array{0,0},{0,0}};}同样奇怪的是,这也失败了:#includestd::array,2>f(){returnstd::array,2>{{0,0},{0,0}};}@1201ProgramAlarm指出添加另一组花括号是可行的:#includestd::array,2>f(){return{{{0,0},{0,0

c++ - 将字符数组中的元素范围提取到字符串中

我想从char数组的开头提取一系列元素并将它们放入字符串中。范围可能小于或等于元素的数量。这是我想出来的。//bufferisastd::arraystd::stringmessage;for(inti=0;i有更好的方法吗?我一直在研究类似std::string的迭代器构造函数之类的东西。例如。std::string(buffer.begin(),buffer.end())但我不想要所有元素。谢谢。 最佳答案 您不必一直走到结束:std::string(buffer.begin(),buffer.begin()+numberToE

c++ - constexpr std::array with static_assert

#include#includeintmain(intargc,char**argv){constexprconststd::arrayarr{{0,1}};constexprconstintarr2[]={0,1};static_assert(arr[0]==arr2[0],"asdf");static_assert(arr[1]==arr2[1],"asdfasdf");return0;}当使用gcc4.8.2和4.9.1使用g++test.cpp--std=c++11编译时,编译成功。但是,当使用clang++test.cpp--std=c++11使用clang3.4和3.5编译

c++ - 未定义模板的隐式实例化 'std::__1::array<int, 3>'

我复制并粘贴了这个确切的代码,找到了here进入我的IDE,出现错误,我不明白为什么会这样,想了解原因。std::arraya2={1,2,3};//exceptafter= 最佳答案 一定要记住#includeButifyoudon'tincludeanystandardheaders,youshouldgetasimplererroraboutstdbeingundefined. 关于c++-未定义模板的隐式实例化'std::__1::array',我们在StackOverflow上

c++ - C++11 中的数组声明和初始化

这里有8种在C++11中声明和初始化数组的方法,在g++下看起来没问题:/*0*/std::arrayarr0({1,2,3});/*1*/std::arrayarr1({{1,2,3}});/*2*/std::arrayarr2{1,2,3};/*3*/std::arrayarr3{{1,2,3}};/*4*/std::arrayarr4={1,2,3};/*5*/std::arrayarr5={{1,2,3}};/*6*/std::arrayarr6=std::array({1,2,3});/*7*/std::arrayarr7=std::array({{1,2,3}});根据严格

c++ - .begin() 和 .end() 的意义何在?

在C++库数组中,在哪些情况下拥有.begin()和.end()成员函数很有用?在cplusplus.com上,示例使用是遍历数组:for(autoit=myarray.begin();it!=myarray.end();++it)但是for(inti=0;i可以用于此。 最佳答案 begin()和end()返回迭代器。迭代器提供统一的语法来访问不同类型的容器。乍一看,它们可能看起来像是遍历简单数组的过度杀伤力,但考虑到您可以编写相同的代码来遍历列表或映射。这种对各种容器的统一访问将允许您编写适用于所有容器的算法,而无需了解它们的内