我正在尝试创建一个存储用户输入的2D数组,但我很难这样做。我问用户他们需要多少天的运输,然后在用户指定X天数后,我问他们在特定日期需要运送多少物品。[Y]
例如: 提示用户输入他们需要的运输天数。用户输入X. 好的,在第1天你需要运送多少件物品。用户输入val1 好的,在第2天.....用户输入val2 等等。直到第X天
我想创建一个2D数组来解决这个问题但不确定如何初始化然后填充它。
非常感谢你的帮助。
答案 0 :(得分:0)
对于一个用户,您可以使用一维“数组”,但需要自己管理主题。
或者,您可以使用std::vector
来存储值。
您有这么多天的总天数和特定值与2D“数组”数据不同。
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;
但您需要记住delete[]
版本与new[]
一起使用。
容易出错...
使用std::vector
。
答案 1 :(得分:0)
如果你真的想玩二维数组,可以选择自己构建一个,我们假设你将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;
}
};