有没有更好的方法在C ++中初始化已分配的数组?

时间:2010-07-14 13:24:05

标签: c++ arrays pointers initialization

如何用另一种(可能更短的)方式写这个? 有没有更好的方法在C ++中初始化已分配的数组?

int main(void) {
   int* a;
   a = new int[10];
   for (int i=0; i < 10; ++i) a[i] = 0;
}

10 个答案:

答案 0 :(得分:37)

 int *a =new int[10](); // Value initialization

ISO C++ Section 8.5/5

  

对T类型的对象进行值初始化意味着:

     

- 如果T是具有用户声明的构造函数(12.1)的类类型(第9节),则调用T的默认构造函数(如果T没有可访问的默认构造函数,则初始化是错误的); < / p>      

- 如果T是没有用户声明的构造函数的非联合类类型,则T的每个非静态数据成员和基类组件都是值初始化的;

     

- 如果T是数组类型,则每个元素都是值初始化的;

     

- 否则,该对象为零初始化

对于zero initializationvalue initializationdefault initialization这两个词之间的差异,请阅读this

答案 1 :(得分:22)

std::vector<int> vec(10, 0); 
int *a = &vec.front();

答案 2 :(得分:20)

您可以使用memset

  

将ptr指向的内存块的第一个num字节设置为指定值(解释为unsigned char)。

答案 3 :(得分:20)

3种方式怎么样?

1.    int *a = new int[10]();

2.    std::vector<int> a(10, 0);

3.    int *a = new int[10];
      memset(a, 0, sizeof(int) * 10);

由于受欢迎的需求,还有更多:

4.    int *a = new int[10];
      std::fill(a, a + 10, 0);

5.    std::vector<int> a(10);
      std::fill(a.begin(), a.end(), 0);

答案 4 :(得分:4)

int main(void) { int *a; a = new int[10]; for(int i=0;i<10;++i) a[i]=0; }

- )

答案 5 :(得分:2)

#include <algorithm>

int main() {
    int *a = new int[10];
    std::fill(a, a + 10, 0);
}

答案 6 :(得分:2)

int *a = (int*) calloc(10, sizeof(*a));

(并检查是否为NULL,或者重写一个针对calloc的安全包装器。)

答案 7 :(得分:1)

也许你可以尝试这样的事情:

int* initIntArray(int size) {
    int *temp = new int[size];
    for(int i = 0; i < size; i++) {
        temp[i]=0;
    }
    return temp;
}

int main () {
    int* a = initIntArray(10);
    int* b = initIntArray(10);
    int* c = initIntArray(10);

    //do stuff with arrays

    delete [] a;
    delete [] b;
    delete [] c;

    return 0;
}

答案 8 :(得分:0)

我是一个C家伙,并不太确定“新”真的有什么用,但这可行吗?


int
main( void ) {
   int i = 10;              // start at the far end of the array
   int *a = new int[10]; 
   while ( i-- ) a[i] = 0;  // while ( i == 9, 8, 7, ... , 0 )
}

只是为了展示我新的循环计数器最爱:while(条件)。

答案 9 :(得分:0)

顺便问一下,使用calloc()怎么样? 说

int i*=(int[10])calloc(10*sizeof(int))

好吧,我只是另一个C家伙..欢迎任何评论