0

私はこれを正しくやっていると思っていましたが、うまくいかないようです。私は基本的にキューを試していますが、1 つのデータ型で問題なく動作しますが、複数を追加しようとしています (最終的には int と int のリストが必要です)。

コードは次のとおりです。

#include <iostream>
#include <queue>
using namespace std;

int main()
{
    struct product {
      int x;
      int y;
    } ;


   queue<product> q;
   q.push(100, 100);
   q.push(200, 100);
   q.push(300, 100);
   q.push(400, 100);

   cout << "Size of the queue: " << q.size() << endl;

   while (!q.empty()) {
       cout << q.front() << endl;
       q.pop();
   }

}

構造体がなくても機能しますが、明らかに、そのようにキュー内の各アイテムに対して 1 つの変数しか受け入れません。複数のアイテムを持つ方法はありますか?

4

4 に答える 4

3

テンプレートタイプに指定されたタイプをローカル定義にすることはできないと思います。への変更:

struct product {
  int x;
  int y;
} ;

int main()
{

product他の人がすでに述べたように、両方の引数を受け入れるコンストラクターを追加します。

struct product {
    int x;
    int y;
    product(int a_x, int a_y) : x(a_x), y(a_y) {}
};

...

q.push_back(product(100, 100));

operator<<を出力するためにオーバーロードすることもできます。product

std::ostream& operator<<(std::ostream& a_out, const product& a_p)
{
    a_out << "product(" << a_p.x << ", " << a_p.y << ")";
    return a_out;
}

while (!q.empty()) {
    cout << q.front() << endl;
    q.pop();
}
于 2012-05-15T14:58:54.843 に答える
3

このqueue::pushメソッドは、キューのタイプである必要がある 1 つのパラメーターを想定しています。次のようにしてみてください。

queue<product> q;
q.push(product(100, 100));
q.push(product(200, 100));
q.push(product(300, 100));
q.push(product(400, 100));

構造体のコンストラクターも定義する必要があります。

struct product {
  int x;
  int y;
  product(int _x, int _y) : x(_x), y(_y) {}
} ;
于 2012-05-15T14:48:15.583 に答える
2

q.push(100, 100)は無効queue::push()です。パラメータは 1 つだけです。product代わりにa をプッシュする必要があります。

product p(100, 100);
q.push(p);

次に、キューに両方の 100 があります (製品構造に格納されます)。

product1aと a の両方を保存する場合product2は、値自体ではなく (ベースへの) ポインターを拡張して保存する共通の基本構造が必要になります (スライシングを回避するため)。この時点で、class代わりに使用することもできますstruct

于 2012-05-15T14:47:48.180 に答える
2

メインは次のようになります。product(int i, int j)コンストラクターの追加と、 に要素を追加する際のコンストラクターの使用に注意してくださいq

int main ()
{
    struct product {
      int x;
      int y;

      product (int i, int j) : x(i), y(j) {}
    } ;

   queue<product> q;
   q.push(product (100, 100));
   q.push(product (200, 100));
   q.push(product (300, 100));
   q.push(product (400, 100));

   cout << "Size of the queue: " << q.size() << endl;

   while (!q.empty()) {
       cout << q.front().x << ", " << q.front().y << endl;
       q.pop();
   }

   return 0;
}
于 2012-05-15T14:46:51.457 に答える