1

コードでこの構造体を使用する必要があります。

struct Pair
{
   int x,y;
   friend bool operator==(Pair a, Pair b)
   {
     return a.x == b.x && a.y == b.y;
   }
   friend istream& operator>>(istream& is, Pair& a)
   {
     is >> a.x >> a.y;
     return is;
   }
   friend ostream& operator<<(ostream& os, Pair a)
   {
     os << '(' << a.x << ',' << a.y << ')';
     return os;
   }
};

.txt ファイルを読み取る必要があります。

5 1 1 2 2 3 3 4 4 5 5
7 1 1 2 2 3 3 4 4 4 7 7 4 7 7
8 1 1 2 4 3 9 4 16 5 25 6 36 7 49 8 64

このファイルには 3 つの関係があり、それぞれがその関係のペアの数である int で始まり、その数のペアが続きます。次に (eof でない場合) 別の int を読み取り、その数のペアを再度読み取ります。

このデータを構造体ペアに読み込むにはどうすればよいですか?

読んだ後、データが再帰的かどうかなどをテストする必要がありますが、このプロジェクトを開始するのに問題があります。

4

1 に答える 1

2

ここに私が書くものがあります。

私の見解はおそらく少し「高度」であることはわかっていますが、少なくとも、必要なコードが実際にはそれほど多くないことを示しているはずです。

説明のビット:

  • 文字列ストリーム ( istringstream) を使用すると、1 行をストリームとして扱うことができます。これは厳密には必要ではありませんが、入力が予期された形式でない場合に問題が発生するのを防ぎます。

  • ストリーム演算子(friend特にoperator>>) を使用すると、単純にストリームからペアを「ただ」読み取ることができます。

    Pair p;
    stream >> p;
    

    さて、これは、以下のコードが an でアルゴリズムを呼び出すときに暗黙的に行うことです (つまり、先ほど示したのとまったく同じ方法で s を抽出します)。copy_nistream_iterator<Pair>Pair

using Pairs = vector<Pair>;

int main()
{
    string line;
    while (getline(cin, line))
    {
        istringstream iss(line);

        unsigned n;
        Pairs pairs;

        if (iss >> n)
            copy_n(istream_iterator<Pair>(iss), n, back_inserter(pairs));

        if (!iss)
            return 255;

        std::cout << "Read a line with " << n << " pairs (check: " << pairs.size() << ")\n";
    }
}

質問からのサンプル入力、印刷を使用してColiruでライブを参照してください。

Read a line with 5 pairs (check: 5)
Read a line with 7 pairs (check: 7)
Read a line with 8 pairs (check: 8)
于 2013-10-16T23:11:03.953 に答える