我刚刚开始接触C++,我想养成一些好习惯。如果我刚刚使用new
操作符分配了一个int
类型的数组,我如何才能在不亲自循环它们的情况下将它们全部初始化为0呢?我应该只使用memset
吗?有没有一种“C++”的方式呢?
发布于 2010-02-05 08:42:30
有许多方法来分配内部类型的数组,所有这些方法都是正确的,尽管选择哪一个取决于...
循环中所有元素的手动初始化
int* p = new int[10];
for (int i = 0; i < 10; i++)
p[i] = 0;
使用<cstring>
中的std::memset
函数
int* p = new int[10];
std::memset(p, 0, sizeof *p * 10);
在<algorithm>
中使用std::fill_n
算法
int* p = new int[10];
std::fill_n(p, 10, 0);
使用std::vector
容器
std::vector<int> v(10); // elements zero'ed
如果C++11可用,请使用initializer list功能
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
发布于 2010-02-05 08:09:45
假设您确实想要一个数组,而不是std::vector,那么"C++方式“应该是这样的
#include <algorithm>
int* array = new int[n]; // Assuming "n" is a pre-existing variable
std::fill_n(array, n, 0);
但请注意,在幕后,这实际上仍然只是一个将每个元素赋值为0的循环(除了具有硬件级支持的特殊体系结构之外,实际上没有其他方法可以做到这一点)。
发布于 2021-06-14 17:00:44
初始化普通动态数组的可能方法。根据您的要求选择一个。
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++)
https://stackoverflow.com/questions/2204176
复制相似问题