繁体   English   中英

整数数组初始化的C ++指针

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM