我想让一个类的所有函数都可以访问一个数组。
我将数组作为私有变量放在头文件中。
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};但是当你最初不知道它的大小时,你怎么做呢。
答案 0 :(得分:6)
如果要对新建数组进行零初始化,只需执行 value-initialize 即可。这具有零初始化其元素的效果:
arrayName = new int[numElements]();
// ^^
但你真的想要使用std::vector<int>
。
private:
std::vector<int> vname;
和
ClassName::ClassName(int numElements) : vname(numElements) {}
这样您就不必担心删除数组并实现复制构造函数和赋值运算符。
答案 1 :(得分:0)
您可以使用memset
功能:
memset(arrayName,0,sizeof(int)*numElements);
此void * memset ( void * ptr, int value, size_t num );
函数将ptr
指向的内存块的前NUM个字节设置为指定值(解释为unsigned char)。
要使用它,您必须包含string.h
标题文件。
答案 2 :(得分:0)
您要做的是按需逐步扩展阵列。
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。可以使用简单的push_back函数增加向量,并允许[]操作符访问(如arr [5]和诸如此类的东西)。
希望这有帮助!