int n[] = {1000,5000,100000,105000,400000,500000,505000,800000,995000,1000000};
int *array1 = new int[n[0]]; //1000
int *array2 = new int[n[1]]; //5000
这对于创建array1
尺寸1000
和array2
尺寸5000
是否有效?
即使经过一年的编程,这些东西仍然让我兴奋不已。
我的第二个问题:有没有办法自动将每个位置的所有值设置为NULL或0?因为在打印数组后,第一个数字块是:
1163089152
1330794578
1162627398
1547322173
1919251285
1766218867
7367020
1129595223
1128090959
1635212346
1836016500
1852405504
1030908260
1465662019
1868852841
29559
1625020798
134224442
4199212
4234532
4234544
4209436
4200378
4286800
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1910233198
134224636
1985292544
1985292576
1985292608
1985292640
1985292672
1985292704
1985292736
1985292768
1985292800
1985292832
1985292864
1985292896
1985292928
1985292960
1985292992
1985293024
1985293056
1985293088
1985293120
1985293152
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
... .... .....
在我目前的任务中,效率是关键。循环遍历1000个元素只是为了将它们设置为0或NULL似乎......效率不高
编辑:问题解决了,谢谢大家的快速答案!
答案 0 :(得分:9)
不,这些值不会被赋予任何特定值。 You can value* initialize them如果你愿意的话:
int *array1 = new int[n[0]](); // Introduced in C++98
int *array1 = new int[n[0]]{}; // Introduced in C++11
这会将所有值初始化为零。
*"默认初始化"在这个上下文中是"value initialization"的口语用词,它是在C ++ 03中引入的,并且几乎总是当人们说"默认初始化"。
答案 1 :(得分:3)
是的,没关系,但是如果你想将数组数据初始化为零,那么你需要:
int *array1 = new int[n[0]]();
int *array2 = new int[n[1]]();
^^^^
你可能想考虑使用稍微更新的C ++习语 - std::vector
可能是比原始数组更好的选择:
std::vector<int> array1(n[0]);
std::vector<int> array2(n[1]);
答案 2 :(得分:3)
这是没有经营的。要将元素初始化为0
,请使用
int *array1 = new int[n[0]]();
// ^^
答案 3 :(得分:3)
这对于创建array1 size 1000和array2 size 5000是否有效?
是的,它是有效的,因为您使用的是运算符new[]
。如果您声明int array1[n[0]]
,那么您将依赖于扩展,因为C ++不支持可变长度数组。
是否所有数组位置都设置为NULL或0?
都不是。在您分配这些值之前,这些值将是未定义的(这是一种说“垃圾”的奇特方式)。您可以在调用new[]
之后附加一对括号来强制进行初始化。
答案 4 :(得分:2)
是operator new[]
正在进行动态内存分配,无论以何种方式传递值都是有效的。不会初始化任何值,您不应忘记为该指针调用delete[]
或使用智能指针。
更好的方法是使用std::vector
-
std::vector<int> array1( n[0] );
std::vector<int> array2( n[1] );
您不必担心内存释放,数据将被初始化。如果需要初始化一些不同于0的值,只需将其作为第二个参数传递:
std::vector<int> array1( n[0], 123 );
std::vector<int> array2( n[1], 456 );
答案 5 :(得分:1)
这对于创建大小为1000的
array1
和大小为5000的array2
是否有效?
是。但是,您最好使用自动管理的动态数组:
std::vector<int> array1(1000);
一旦你完成了数组,就可以省去记住删除数组的麻烦。如果没有RAII,那就很难做到这一点。
是否所有数组位置都设置为NULL或0?
没有。 new
将默认初始化它创建的对象;对于像int
这样的原始类型,默认初始化不做任何事情,使它们具有不确定的值。
如果您希望将它们的值初始化为零,则可以指定:
int *array1 = new int[n[0]]();
^^
或使用vector
,除非您指定其他初始值,否则将对其进行值初始化。