c – 使用new来分配连续空间vs使用向量?
当我们有向量时,为什么要使用这样的新内存位置?
有什么优势吗? bool* arr = new bool(size); 我不清楚这条线的作用是什么,但我的感受是什么 std::memset(arr,sizeof(bool) * (num+1)); 解决方法
该行在堆中分配一个布尔值,如果size!= 0则将其初始化为true,如果size == 0则将其初始化为false.然后将新分配的布尔值的地址分配给布尔指针arr.所以没有阵列在这里玩.
在堆中分配数组的正确方法是使用operator new [].那是你的情况: bool* arr = new bool[size]; 随着智能指针的出现,您还可以使用std :: unique_ptr: std::unique_ptr<bool[]> arr(new bool[size]); 因此,您不必在之后删除[].
除了bool之外的任何其他类型我都同意,但问题是std :: vector< bool>存在某些问题. 的std ::矢量< BOOL>是std :: vector< T>的特化.这主要是为了提高空间效率(有争议). 然而,它的行为与常规std :: vector< T>相似但不均等.这主要归因于std :: vector< bool>不是通常的STL意义上的容器,而是一个位数组.通常,使用std :: vector< bool>可能导致许多破坏,它被认为是过早的优化,它甚至可以使你的表现变得更糟(详见here). 另一件事是,在嵌入式系统中,空间是空间的,使用原始数组而不是向量是空间效率方面的更好选择.
不过,您可以使用以下方案: bool* arr = new bool[size](); ^^ 要么 std::unique_ptr<bool[]> arr(new bool[size]()); 因此,避免调用原始内存操纵器std :: memset使用谨慎类别. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |