整数数组初始化的 C++ 指针
C++ Pointer of Array of Ints Initialization
我想要一个数组,可由 class 的所有函数访问。
我把数组作为私有变量放在头文件中。
private:
int* arrayName;
在我实现 class 的 .cpp 文件中,构造函数接受一个 int 值(大小)并创建数组。目标是把它填满
ClassName::ClassName(int numElements){
arrayName = new int[numElements]; //make arrays the size of numElements
for(int i = 0; i<numElements; i++)
arrayName[i] = 0;
}
我觉得这样效率很低。我知道你可以做 int array[5] = {0};但是当你最初不知道尺寸时你该怎么做。
您可以使用memset
函数:
memset(arrayName,0,sizeof(int)*numElements);
此 void * memset ( void * ptr, int value, size_t num );
函数将 ptr
指向的内存块的前 num 个字节设置为指定值(解释为无符号字符)。
要使用它,您必须包含 string.h
头文件。
如果你想对新数组进行零初始化,只需值初始化即可。这具有对其元素进行零初始化的效果:
arrayName = new int[numElements]();
// ^^
但您确实想使用 std::vector<int>
。
private:
std::vector<int> vname;
和
ClassName::ClassName(int numElements) : vname(numElements) {}
这样您就不必担心删除数组和实现复制构造函数和赋值运算符。
你要做的是按需逐步扩展数组。
arrayName = new int[numElements];
for(int i = 0; i<numElements; i++)
arrayName[i] = 0;
上面的代码(您给出的代码)将为您提供一个大小为 numElements 的数组,然后 for 循环将填充它。这是现在分配的,据我所知,不能简单或容易地调整大小(memset 将覆盖数组中以前保存的值)。
每次要调整大小时都可以复制整个数组:
int * oldarr = new int[OldSize];
//fill your old array
int * newarr = new int[NewSize];
for(int i = 0; i<OldSize; i++)
newarr[i] = oldarr[i];
除此之外,您可以使数组更大,或者您可以使用各种 STL,例如 std::vector。 Vector 可以通过简单的 push_back 函数增加,并允许 [] 运算符访问(如 arr[5] 和诸如此类)。
希望对您有所帮助!
我想要一个数组,可由 class 的所有函数访问。
我把数组作为私有变量放在头文件中。
private:
int* arrayName;
在我实现 class 的 .cpp 文件中,构造函数接受一个 int 值(大小)并创建数组。目标是把它填满
ClassName::ClassName(int numElements){
arrayName = new int[numElements]; //make arrays the size of numElements
for(int i = 0; i<numElements; i++)
arrayName[i] = 0;
}
我觉得这样效率很低。我知道你可以做 int array[5] = {0};但是当你最初不知道尺寸时你该怎么做。
您可以使用memset
函数:
memset(arrayName,0,sizeof(int)*numElements);
此 void * memset ( void * ptr, int value, size_t num );
函数将 ptr
指向的内存块的前 num 个字节设置为指定值(解释为无符号字符)。
要使用它,您必须包含 string.h
头文件。
如果你想对新数组进行零初始化,只需值初始化即可。这具有对其元素进行零初始化的效果:
arrayName = new int[numElements]();
// ^^
但您确实想使用 std::vector<int>
。
private:
std::vector<int> vname;
和
ClassName::ClassName(int numElements) : vname(numElements) {}
这样您就不必担心删除数组和实现复制构造函数和赋值运算符。
你要做的是按需逐步扩展数组。
arrayName = new int[numElements];
for(int i = 0; i<numElements; i++)
arrayName[i] = 0;
上面的代码(您给出的代码)将为您提供一个大小为 numElements 的数组,然后 for 循环将填充它。这是现在分配的,据我所知,不能简单或容易地调整大小(memset 将覆盖数组中以前保存的值)。
每次要调整大小时都可以复制整个数组:
int * oldarr = new int[OldSize];
//fill your old array
int * newarr = new int[NewSize];
for(int i = 0; i<OldSize; i++)
newarr[i] = oldarr[i];
除此之外,您可以使数组更大,或者您可以使用各种 STL,例如 std::vector。 Vector 可以通过简单的 push_back 函数增加,并允许 [] 运算符访问(如 arr[5] 和诸如此类)。
希望对您有所帮助!