【问题标题】:Create N linked lists being N a number from keyboard in C++在 C++ 中从键盘创建 N 个链表,即 N 个数字
【发布时间】:2018-12-07 22:56:12
【问题描述】:

我的程序有问题。我会尽力解释,以便你能帮助我。

假设您想要拥有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;
}

其中Gbool G[x][y],我用它来创建元素与它的包之间的关系,但这不起作用,因为它没有给我输入的顺序。

我想过创建一个链接列表,但我不知道如何使用从键盘给出的N 创建N 列表,然后访问每个列表。

我不知道是否清楚,但我不需要随机访问每个包的每个元素,我只需要一个包,按输入顺序迭代其元素。

【问题讨论】:

  • 通常不使用[] 运算符访问链接列表。
  • 我知道,但我不需要随机访问 bag 的每个元素,我只需要按照输入的顺序访问它的元素
  • 这些值以您存储它们的任何顺序存储。读取一个数字,将其放入列表中。读取下一个数字,将其放入同一列表的下一个插槽中。然后继续。然后从第一个到最后一个迭代列表。这些值将与输入的顺序相同。你到底有什么问题?
  • @Uwunt 但我不知道如何创建 N 个列表 -- std::vector&lt;MyLinkedListClass&gt; Lists(N);

标签: c++ linked-list


【解决方案1】:

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;
}

Live Demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 2020-03-02
    • 2011-08-30
    • 1970-01-01
    • 1970-01-01
    • 2012-11-30
    • 2021-12-15
    相关资源
    最近更新 更多