整数数组初始化的 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 头文件。

更多信息:http://www.cplusplus.com/reference/cstring/memset/

如果你想对新数组进行零初始化,只需值初始化即可。这具有对其元素进行零初始化的效果:

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] 和诸如此类)。

希望对您有所帮助!