我的程序有问题。我会尽力解释,以便您可以帮助我。
想象一下,您想拥有N
个袋子,对于每个袋子,您都想输入多个球(每个袋子的最大球数= 10)。
我有一个函数,它首先介绍了袋子的数量N
,然后它从用户那里读取了每个袋子的输入行,例如1 3 4 9
,指出了输入到其中的元素那个袋子,依此类推,直到每个袋子N
。
我遇到的问题是,在全部引入这些球之后,如何“记住”这些球的输入顺序?在上面的示例行中,顺序为:先是1,然后是3,然后是4,最后是9。
在其他功能中,我需要为每个包i
按输入顺序获取其元素,并对其进行处理。
我的代码类似于
for (int i = 0; i < N ; i ++){
//read all numbers
//and for each number "j"
G[i][j] = true;
}
G
是bool G[x][y]
的地方,我用它来创建元素与其包之间的关系,但这是行不通的,因为它没有给我输入顺序。
我曾考虑过创建链接列表,但是我不知道如何使用键盘上的N
创建N
列表,然后访问每个列表。
我不知道是否清楚,但是我不需要随机访问每个包中的每个元素,我只需要一个包,按输入顺序对其元素进行迭代。
答案 0 :(得分:0)
这是std::vector
最适合的情况。您不需要使用链接列表(例如std::list
)。
例如:
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <limits>
struct Bag
{
int NumBalls;
int Balls[10];
Bag() : NumBalls(0) {}
};
int main()
{
int N;
std::cout << "How many bags do you want? ";
if (!((std::cin >> N) && (N > 0)))
{
std::cout << "Bad input!" << std::endl;
return 0;
}
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::vector<Bag> Bags(N);
for (int i = 0; i < N; ++i)
{
std::cout << "Enter balls for bag " << i+1 << ": ";
std::string line;
if (!std::getline(std::cin, line))
break;
std::istringstream iss(line);
Bag &bag = Bags[i];
int ball;
do
{
if (!(iss >> ball))
{
if (!iss.eof())
std::cout << "Bad input!" << std::endl;
break;
}
bag.Balls[bag.NumBalls] = ball;
bag.NumBalls++;
}
while (bag.NumBalls < 10);
}
std::cout << std::endl;
for (int i = 0; i < N; ++i)
{
std::cout << "Bag " << i+1 << " contains:";
Bag &bag = Bags[i];
for(int j = 0; j < bag.NumBalls; ++j)
std::cout << " " << bag.Balls[j];
std::cout << "\n";
}
return 0;
}