草庐IT

l_velocity_Array

全部标签

c++ - 在编译时获取 std::array 中的元素数量

以下是有效的C++代码吗?为什么不是?std::arraya1;std::arraya2;它不能在GCC4.8(在C++11模式下)编译。有一个简单但不优雅的解决方法:std::arraya1;std::arraya2;很明显,编译器可以计算出std::array中元素的数量。为什么std::array::size()不是constexprstatic函数?编辑:我找到了另一种解决方法:std::arraya1;std::array::value>a2; 最佳答案 array::size()是constexpr,但不能这样使用,因为

c++ - 如何从 boost::python 返回 numpy.array?

我想从C++代码中返回一些数据作为numpy.array目的。我看过boost::python::numeric,但它的文档非常简洁。我可以举个例子吗?返回一个(不是很大)vector到python?我不介意复制数据。 最佳答案 更新:我的原始答案(https://github.com/ndarray/Boost.NumPy)中描述的库从Boost1.63开始已直接集成到Boost.Python中,因此现在不推荐使用独立版本。下面的文本现在对应于新的集成版本(只有命名空间发生了变化)。Boost.Python现在将NumPyC-AP

C++ STL : Array vs Vector: Raw element accessing performance

我正在构建一个解释器,因为这次我的目标是原始速度,所以在这种(原始)情况下,每个时钟周期对我来说都很重要。您是否有任何经验或信息,两者哪个更快:vector或数组?重要的是我可以访问元素的速度(操作码接收),我不关心插入、分配、排序等。我现在要靠在窗外说:在访问元素i方面,数组至少比vector快一点。这对我来说似乎很合乎逻辑。使用vector,您可以获得数组不存在的所有安全性和控制开销。(为什么)我错了吗?不,我不能忽略性能差异-即使它如此很小-我已经优化并最小化了执行操作码的VM的所有其他部分:) 最佳答案 std::vecto

c++ - 是什么阻止 g++ 消除运行时未使用的临时 std::array ?

#include#includeclassP{public:P():_value(nullptr){}~P(){delete_value;}private:char*_value;};voidfoo(){if(std::array().size()!=4)assert(false);}foo()函数创建一个临时数组来检查大小是否符合程序员的预期。使用-O1或更高版本的g++计算出assert不会失败,并且从生成的代码中删除了对__assert_fail的调用。但是g++仍然会生成代码来首先构造然后破坏现在未使用的数组。g++-std=c++11-O3[4.8.2]:0000000000

c++ - std::array 的 constexpr 开头

我无法理解为什么gcc-8.2.0和clang-7.0.0都拒绝以下代码(实时代码here):#includeintmain(){constexprstd::arrayv{1,2,3};constexprautob=v.begin();//error:notaconstexprreturn0;}有错误error:'(std::array::const_pointer)(&v.std::array::_M_elems)'isnotaconstantexpression(constexprautob=v.begin();)根据en.cppreference.com,begin()成员函数被

c++ - std::array<> 是否只保证在堆栈上分配?

是std::array(我自己没有使用new)保证在C++标准中分配在堆栈而不是堆中?要清楚,我的意思不是newstd::array.我主要想知道,是否允许标准库使用new在其实现中。 最佳答案 TL;DR:是的,它在堆栈上。更长的故事:C++没有堆栈或堆的概念。这些是实现细节,并且至少有一个平台不使用传统堆栈(而是使用堆分配的链表)。它有自动存储和免费存储。new访问空闲存储,“堆栈上”的变量进入自动存储。实际上,为了在空闲存储上分配东西,您必须冒内存不足异常的风险。所以一般规则是保证不扔的东西必须使用自动存储。array做出了这

c++ - std::array 可以在 constexpr 类中使用吗?

我目前正在使用constexpr构造函数创建一个类,我想知道是否可以使用std::array来存储该类的数据。标准是否明确规定std::array有一个constexpr构造函数并且可以在编译时访问其内容? 最佳答案 因为std::array是一个聚合,它可以被初始化为constexpr当且仅当基础类型T有一个constexpr构造函数(与您提供的每个初始化程序一起出现时)。 关于c++-std::array可以在constexpr类中使用吗?,我们在StackOverflow上找到一个

c++ - 为什么不能简单地初始化(带大括号)2D std::array?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:c++whyinitializer_listbehaviorforstd::vectorandstd::arrayaredifferent我定义了简单的二维数组(3X2):std::array,2>a{{1,2,3},{4,5,6}};我很惊讶这个初始化不起作用,gcc4.5错误:toomanyinitializersfor'std::array,2u>'为什么我不能使用这种语法?我找到了解决方法,一个非常有趣的额外大括号,但只是想知道为什么第一个最简单的方法无效?解决方法://EXTRABRACESstd:

c++ - std::array 是可 move 的吗?

std::array可以move吗?在BjarneNative2012presentationslides(幻灯片41)它将std::array列为唯一不可move的容器之一。快速浏览gcc4.8库源代码似乎可以确认std::array是不可move的:std::vector:/*@brief%Vectormoveconstructor....*/vector(vector&&__x)noexcept:_Base(std::move(__x)){}而在std::array中,唯一接收右值引用参数的方法是随机元素访问,它避免了复制返回:get(array&&__arr)noexcept{

c++ - 使用 std::array<T, N> 会导致代码膨胀吗?

这个问题在这里已经有了答案:C++Templates:Convincingselfagainstcodebloat(7个回答)关闭8年前。我在一些地方看到了在C++中使用std::array而不是C样式数组的建议,声称它是一种更好、更安全且没有开销的替代方案。见:Thestandardcontainerarray[...]hasnospaceoverheadsbeyondwhatitneedstoholditselements,[...].Inotherwords,itisverymuchlikeabuilt-inarraywithouttheproblems.(C++11FAQ)但是