我正在尝试创建一个存储用户输入的二维数组,但这样做很困难。我问用户他们需要多少天的送货时间,然后在用户指定X天后,我问他们在特定的一天需要送货多少件商品。Y
例如:提示用户输入他们需要的休运天数。用户输入X好的,在第一天你需要发货多少件。用户在第2天输入val1 on .....用户输入val2等。一直到第X天
我想创建一个二维数组来解决这个问题,但不确定如何初始化并填充它。
非常感谢你的帮助。
发布于 2017-09-19 21:12:40
对于一个用户,你可以使用一个一维的“数组”,但需要自己管理内存。或者,您可以使用std::vector
来存储值。你有一个总天数和每一天的特定值,这与数据的二维“数组”是不同的。
int main()
{
int input;
cout << "how many?" << endl;
cin >> input;
int * one_way = new int[input];
std::vector<int> or_another_way;
for (int i = 0; i < input; ++i)
{
int number;
cout << "how many on day " << i+1 << "?" << endl;
cin >> number;
one_way[i] = number;
or_another_way.push_back(number);
}
delete[] one_way;
}
似乎是为了证明我的观点,正如评论指出的那样,我最初只是
delete one_way;
但您需要记住,new[]
附带的delete[]
版本。
容易出错...
使用std::vector
。
发布于 2017-09-20 06:05:30
如果你真的想尝试2D数组,你可以自己动态构建一个,比方说你将在里面存储int
:
int** array2d;
int x,y;
//Fill x and y with user input here
array2d = new int*[x];
for (int i = 0; i < x; i++)
array2d[i] = new int[y];
array2d[X][Y]; //use like this
//don't forget to clean after yourself ;)
for (int i = 0; i < x; i++)
delete[] array2d[i];
delete[] array2d;
我强烈建议用一个class
来包装这个结构,这样你就会感觉很舒服,一切都很好很干净。例如:
class Array2D
{
private:
int** array2d;
int xSize, ySize;
Array2D()
{
xSize = ySize = 0;
array2d = nullptr;
}
public:
Array2D(int x, int y)
{
array2d = nullptr;
xSize = x;
ySize = y;
array2d = new int*[xSize];
for (int i = 0; i < xSize; i++)
if (ySize > 0)
array2d[i] = new int[ySize];
else
array2d[i] = nullptr;
}
~Array2D()
{
if (xSize != 0 && ySize != 0)//checking for nullptr is better
{
for (int i = 0; i < xSize; i++)
delete[] array2d[i];
delete[] array2d;
}
else if (xSize != 0 && ySize == 0)//here nullptr check is also advised
{
delete[] array2d;
}
}
int getXY(int x, int y)
{
return array2d[x][y];
}
void setXY(int x, int y, int z)
{
//of coure check constraints also ;)
array2d[x][y] = z;
}
};
https://stackoverflow.com/questions/46301074
复制相似问题