Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C++;?_C++_Arrays_Multidimensional Array - Fatal编程技术网

C++ 在C++;?

C++ 在C++;?,c++,arrays,multidimensional-array,C++,Arrays,Multidimensional Array,有一种方法,您只需编写array[rowSize][colSize]。另一种方法是使用new将其声明为指向数组的指针数组。(来自) int**ary=newint*[rowCount]; 对于(int i=0;i

有一种方法,您只需编写array[rowSize][colSize]。另一种方法是使用new将其声明为指向数组的指针数组。(来自)

int**ary=newint*[rowCount];
对于(int i=0;i
应该有一个使用malloc。还有吗?它们各自的优点/缺点是什么?他们的执行/处理速度如何


(这是一个面试问题。因此,除了建议最佳方法外,我还需要知道每种方法的作用)

我不完全理解这里的问题,但我可以告诉你两者之间的区别。使用new(或malloc)时,变量不在堆栈中。声明变量时,如:

int iarray[10][10];

它使用堆栈空间。使用新运算符的缺点是您必须记住也要使用delete[]运算符。

我不完全理解这里的问题,但我可以告诉您两者之间的区别。使用new(或malloc)时,变量不在堆栈中。声明变量时,如:

int iarray[10][10];

它使用堆栈空间。使用新运算符的缺点是,您必须记住也要使用delete[]运算符。

有不同的类型:

1.这是一个数组,其中每个元素本身就是一个数组:

int array[rowSize][colSize];
是这样的:

typedef int A[colSize];
A array[rowSize];
其中
sizeof(A)
colSize*sizeof(int)
sizeof(array)
is
rowSize*sizeof(A)

[3][3]内存中元素的索引:

|0,0|0,1|0,2|1,0|1,1|1,2|2,0|2,1|2,2|
2.这是指向指针的指针:

int** ary
其中,
ari
可指指针数组 其中每个元素可以引用int的任意大小数组。 指针的大小取决于机器

它在示例中初始化为poiner数组。在这之后,它的每个元素都被初始化为新创建的数组

例如:

int** ary = new int*[rowCount];
for(int i = 0; i < rowCount; ++i)
  ary[i] = new int[colCount];

有不同的类型:

1.这是一个数组,其中每个元素本身就是一个数组:

int array[rowSize][colSize];
是这样的:

typedef int A[colSize];
A array[rowSize];
其中
sizeof(A)
colSize*sizeof(int)
sizeof(array)
is
rowSize*sizeof(A)

[3][3]内存中元素的索引:

|0,0|0,1|0,2|1,0|1,1|1,2|2,0|2,1|2,2|
2.这是指向指针的指针:

int** ary
其中,
ari
可指指针数组 其中每个元素可以引用int的任意大小数组。 指针的大小取决于机器

它在示例中初始化为poiner数组。在这之后,它的每个元素都被初始化为新创建的数组

例如:

int** ary = new int*[rowCount];
for(int i = 0; i < rowCount; ++i)
  ary[i] = new int[colCount];

使用
std::vector
任何你能用
new
做的事情,你都可以用
malloc
、一个
static\u cast
和一些放置
new
s.@BaummitAugen:
std::vector
本身并不是一个很好的二维数组。@BaummitAugen:嵌套向量有它们的用途,但是它们在尝试二维数组时真的很糟糕。我喜欢一个带有包装的一维数组,使它看起来像二维的。使用
std::vector
任何你能用
new
做的事情,你都可以用
malloc
、一个
static\u cast
和一些放置
new
s.@BaummitAugen:
std::vector
本身并不是一个很好的二维数组。@BaummitAugen:嵌套向量有它们的用途,但它们在尝试二维数组时真的很糟糕。我喜欢一个带包装的一维数组,使它看起来像二维的。你错过了上下文的讨论。如果您在文件范围中这样声明它,那么它具有
静态
生存期,并且在典型的实现中,它被放置在
.bss
.ibss
段而不是堆栈中。在函数内部,它有自动的生存期,是的,在典型的实现中,它是在堆栈上的。在一个类中,它接受包含类的实例的存储类,该类可以放在静态存储中,在堆栈、堆中,在另一个对象中。。。说“它使用堆栈空间”是100%太简单了。是的,我试图保持它的简单。。。我希望我没有惹你生气。你错过了一次关于背景的讨论。如果您在文件范围中这样声明它,那么它具有
静态
生存期,并且在典型的实现中,它被放置在
.bss
.ibss
段而不是堆栈中。在函数内部,它有自动的生存期,是的,在典型的实现中,它是在堆栈上的。在一个类中,它接受包含类的实例的存储类,该类可以放在静态存储中,在堆栈、堆中,在另一个对象中。。。说“它使用堆栈空间”是100%太简单了。是的,我试图保持它的简单。。。我希望我没有惹恼你们。刚才用户@Lamar Latrell制作的版本被我的版本同时拒绝了。我手动应用建议的更改。谢谢。用户@Lamar Latrell刚刚制作了版本,但同时被我的版本拒绝了。我手动应用建议的更改。谢谢