首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在C++中用新运算符初始化内存?

如何在C++中用新运算符初始化内存?
EN

Stack Overflow用户
提问于 2010-02-05 08:06:20
回答 6查看 154.2K关注 0票数 189

我刚刚开始接触C++,我想养成一些好习惯。如果我刚刚使用new操作符分配了一个int类型的数组,我如何才能在不亲自循环它们的情况下将它们全部初始化为0呢?我应该只使用memset吗?有没有一种“C++”的方式呢?

EN

回答 6

Stack Overflow用户

发布于 2010-02-05 08:42:30

有许多方法来分配内部类型的数组,所有这些方法都是正确的,尽管选择哪一个取决于...

循环中所有元素的手动初始化

代码语言:javascript
复制
int* p = new int[10];
for (int i = 0; i < 10; i++)
    p[i] = 0;

使用<cstring>中的std::memset函数

代码语言:javascript
复制
int* p = new int[10];
std::memset(p, 0, sizeof *p * 10);

<algorithm>中使用std::fill_n算法

代码语言:javascript
复制
int* p = new int[10];
std::fill_n(p, 10, 0);

使用std::vector容器

代码语言:javascript
复制
std::vector<int> v(10); // elements zero'ed

如果C++11可用,请使用initializer list功能

代码语言:javascript
复制
int a[] = { 1, 2, 3 }; // 3-element static size array
vector<int> v = { 1, 2, 3 }; // 3-element array but vector is resizeable in runtime
票数 27
EN

Stack Overflow用户

发布于 2010-02-05 08:09:45

假设您确实想要一个数组,而不是std::vector,那么"C++方式“应该是这样的

代码语言:javascript
复制
#include <algorithm> 

int* array = new int[n]; // Assuming "n" is a pre-existing variable

std::fill_n(array, n, 0); 

但请注意,在幕后,这实际上仍然只是一个将每个元素赋值为0的循环(除了具有硬件级支持的特殊体系结构之外,实际上没有其他方法可以做到这一点)。

票数 26
EN

Stack Overflow用户

发布于 2021-06-14 17:00:44

初始化普通动态数组的可能方法。根据您的要求选择一个。

代码语言:javascript
复制
int* x = new int[5];          // gv gv gv gv gv (gv - garbage value)
int* x = new int[5]();        // 0  0  0  0  0 
int* x = new int[5]{};        // 0  0  0  0  0  (Modern C++)
int* x = new int[5]{1,2,3};   // 1  2  3  0  0  (Modern C++)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2204176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档