[英]C++ Pointer of Array of Ints Initialization
我想让一个类的所有函数都可以访问一个数组。
我把数组作为私有变量放在头文件中。
private:
int* arrayName;
在实现类的.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}; 但是当您最初不知道尺寸时该怎么做。
如果要对初始化的数组进行零初始化,则只需对其进行值初始化 。 这具有零初始化其元素的效果:
arrayName = new int[numElements]();
// ^^
但是您真的想使用std::vector<int>
。
private:
std::vector<int> vname;
和
ClassName::ClassName(int numElements) : vname(numElements) {}
这样,您不必担心删除数组以及实现复制构造函数和赋值运算符。
您可以使用memset
函数:
memset(arrayName,0,sizeof(int)*numElements);
这个void * memset ( void * ptr, int value, size_t num );
函数将ptr
指向的内存块的前num个字节设置为指定值(解释为无符号字符)。
要使用它,您必须包括string.h
头文件。
有关更多信息: http : //www.cplusplus.com/reference/cstring/memset/
您要做的是按需逐步扩展阵列。
arrayName = new int[numElements];
for(int i = 0; i<numElements; i++)
arrayName[i] = 0;
上面的代码(您提供的代码)将为您提供一个大小为numElements的数组,然后for循环将填充它。 现在分配了它,据我所知,不能简单或轻松地调整大小(内存集将覆盖数组中以前保存的值)。
您可以在每次调整大小时复制整个数组:
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。 向量可以通过简单的push_back函数来增加,并允许[]运算符访问(如arr [5]和诸如此类)。
希望这可以帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.