我刚刚尝试过:
class Test
{
public:
int iArray[][];
}
……这不可能吗?我必须设置一个恒定值吗?
喜欢:
class Test
{
public:
const int iArray[5][4];
}
我想稍后定义 [x][y],只要有展示位置。否则它不会是“动态的”,我不想使用向量,因为我希望能够通过“X”和“Y”访问值。
我刚刚尝试过:
class Test
{
public:
int iArray[][];
}
……这不可能吗?我必须设置一个恒定值吗?
喜欢:
class Test
{
public:
const int iArray[5][4];
}
我想稍后定义 [x][y],只要有展示位置。否则它不会是“动态的”,我不想使用向量,因为我希望能够通过“X”和“Y”访问值。
我认为实现这一目标的更好方法是使用指针。你可以这样做。
#include <cstdlib>
#include <iostream>
using namespace std;
class PointerTest {
private:
int** array;
int x, y;
public :
void setValue(int row, int col,int value);
int getValue(int row, int col);
PointerTest(int row, int col);
~PointerTest() {
for(int i=0;i<x;i++) {
delete array[y];
}
}
};
PointerTest::PointerTest(int row, int col) {
x=row, y=col;
for(int i=0;i<row;i++) {
*array=new int[col];
}
}
void PointerTest::setValue(int row, int col, int value) {
*(array[row])=value;
}
int PointerTest::getValue(int row, int col) {
return *(array[row]);
}
int main(int argc, char *argv[])
{
PointerTest* t=new PointerTest(4,5);
t->setValue(0,0,464);
cout<<"The value in array: "<<t->getValue(0,0)<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}
将 std::vector 放入向量中怎么样?
std::vector< std::vector< const int > > iArray;
在 C++ 中使用“普通”数组的理由并不多。
关于什么
tempalte <int N1, int N2> class Test
{
public:
int iArray[N1][N2];
};
?
如果您想int iArray[][];
稍后决定大小,则可以使用vector< vector<int> > iArray;
.
另一种方法是使用 nested new[]
,这有点复杂。
不,这是不可能的。但是你可以在你的类中有一个指针,比如
int **ptr;
然后在构造函数或任何地方为您的数组分配内存
ptr = (int **)malloc( the size you want );
或使用 C++ 中的“new[]”-运算符。
但是如果您使用的是 C++ .. 最好的方法是使用:
std::vector< std::vector< int >> array;
class Test
{
public:
Test()
{
iArray = new int*[5];
for(int i = 0; i < 5; i++)
iArray[i] = new int[4];
}
~Test()
{
for(int i = 0; i < 5; i++)
delete[] iArray[i];
delete[] iArray;
}
int** iArray;
};
将允许您在运行时分配一个 2d int 数组(在此示例中为 5x4),但老实说,我会使用其他一些海报所指出的向量,您无需担心之后释放内存你用新做的。