C++ 在C++;?
有一种方法,您只需编写array[rowSize][colSize]。另一种方法是使用new将其声明为指向数组的指针数组。(来自)C++ 在C++;?,c++,arrays,multidimensional-array,C++,Arrays,Multidimensional Array,有一种方法,您只需编写array[rowSize][colSize]。另一种方法是使用new将其声明为指向数组的指针数组。(来自) int**ary=newint*[rowCount]; 对于(int i=0;i
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)
isrowSize*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)
isrowSize*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刚刚制作了版本,但同时被我的版本拒绝了。我手动应用建议的更改。谢谢