我一周前开始学习C ++,来自C。
我输入的格式如下:
7
13 -4 -10 4 9 7 -3
4
0 -2 -1 2
2
3 5
0
第一个数字给出第一个数组中的元素数。一旦这个数字为零,我们就停止扫描数组。
我想将这些数组扫描成一个数组数组,如下所示:
[[13,-4,-10,4,9,7,-3] , [0,-2,-1,2] , [3,5]]
我知道如何扫描第一个数组:
int n;
int array1[MAXLENGTH];
cin >> n;
for (int i = 0; i < n; i++) {
cin >> array1[i];
// scanf("%d", &array1[i]);
}
我被卡在0 -2 -1 2
上,因为它从零开始。
如何在这些阵列中扫描并在遇到最后一个零时停止?
答案 0 :(得分:1)
无论数据如何,输入模式都是相同的:
unsigned int array_index = 0U;
unsigned int quantity;
std::vector<std::vector<int> > database;
while (cin >> quantity)
{
if (quantity == 0U)
{
break;
}
int value = 0;
for (unsigned int i = 0; i < quantity; ++i)
{
cin >> value;
database[array_index].push_back(value);
}
++array_index;
}
矢量矢量应该能够包含数据。
输入数据行:
4
0 -2 -1 2
4
表示第二组的数字数量。
0
是第二组数据的第一个数据。
输入文件中有3组数据。
答案 1 :(得分:1)
如其他答案中所述,您应该有两个嵌套循环。
这是外循环:
std::vector<std::vector<int>> data;
while (true)
{
int size = 0;
std::cin >> size;
if (size == 0)
break;
std::vector<int> array;
... // fill the array
data.push_back(array);
}
C ++向量具有动态大小。也就是说,在定义动态数组时,您不需要知道大小是多少 - 它会在元素添加到其中时调整其大小(使用push_back
)。这对外循环很方便。
然而,对于内部循环,使用预先分配的向量更方便,因为您的代码“早知道”了数组的大小:
std::vector<int> array(size); // allocate the array and set all elements to zero
for (int i = 0; i < size; ++i)
{
std::cin >> array[i];
}
您还可以使用基于范围的循环:
std::vector<int> array(size); // allocate the array and set all elements to zero
for (int& value: array)
{
std::cin >> value;
}
答案 2 :(得分:0)
int n;
int array1[MAXLENGTH];
while(true)
{
cin >> n;
if(n == 0) break;
for (int i = 0; i < n; i++) {
cin >> array1[i];
// scanf("%d", &array1[i]);
}
}
加上当然你应该使用std :: vector,并且你输入丢失了,因为它存储在同一个数组中,每次都会被覆盖。