加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 使用new来分配连续空间vs使用向量?

发布时间:2020-12-16 10:05:49 所属栏目:百科 来源:网络整理
导读:当我们有向量时,为什么要使用这样的新内存位置? 有什么优势吗? bool* arr = new bool(size); 我不清楚这条线的作用是什么,但我的感受是什么 这个std :: memset设置了所有param2 从param1的地址开始到结尾的位置 给定的大小 std::memset(arr,sizeof(bool) *
当我们有向量时,为什么要使用这样的新内存位置?
有什么优势吗?

bool* arr = new bool(size);

我不清楚这条线的作用是什么,但我的感受是什么
这个std :: memset设置了所有param2
从param1的地址开始到结尾的位置
给定的大小

std::memset(arr,sizeof(bool) * (num+1));

解决方法

What this line bool* arr = new bool(size); does?

该行在堆中分配一个布尔值,如果size!= 0则将其初始化为true,如果size == 0则将其初始化为false.然后将新分配的布尔值的地址分配给布尔指针arr.所以没有阵列在这里玩.

How I could allocate an array of boolean with new?

在堆中分配数组的正确方法是使用operator new [].那是你的情况:

bool* arr = new bool[size];

随着智能指针的出现,您还可以使用std :: unique_ptr:

std::unique_ptr<bool[]> arr(new bool[size]);

因此,您不必在之后删除[].

Why use a new memory allocation like this when we have vectors?

除了bool之外的任何其他类型我都同意,但问题是std :: vector< bool>存在某些问题.

的std ::矢量< BOOL>是std :: vector< T>的特化.这主要是为了提高空间效率(有争议).

然而,它的行为与常规std :: vector< T>相似但不均等.这主要归因于std :: vector< bool>不是通常的STL意义上的容器,而是一个位数组.通常,使用std :: vector< bool>可能导致许多破坏,它被认为是过早的优化,它甚至可以使你的表现变得更糟(详见here).

另一件事是,在嵌入式系统中,空间是空间的,使用原始数组而不是向量是空间效率方面的更好选择.

What about std::memset(arr,sizeof(bool) * (size));?

std::memset从地址arr(即第一输入参数)开始,用给定值(即第二输入参数)初始化存储器中的一定数量的字节(即第三输入参数).在上面的示例中,它将使用0到最大字节数填充arr.也就是说,如果arr是一个大小大小的数组,它会将此布尔数组的所有元素初始化为false.

不过,您可以使用以下方案:

bool* arr = new bool[size]();
                          ^^

要么

std::unique_ptr<bool[]> arr(new bool[size]());

因此,避免调用原始内存操纵器std :: memset使用谨慎类别.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读