0

例えば:

class apple
{
public:
    string name;

    apple::apple(string name) : name(name)
    {
    }
};

リンゴの種類ごとにたくさんのリストを作りたい場合は、 のようなことができると思いstd::list<apple> empire("empire"), macintosh("macintosh")ました。list<T>基本的に、リストを作成するときに宣言されたクラス T のコンストラクターに引数を渡したいと思います。私がこれを正しく説明していない場合は申し訳ありませんが、その能力があれば私の質問を自由に編集してください。

ありがとう

編集この質問は混乱しているようで、おそらく私が悪い例を挙げたためです。クラスを再設計する必要があります。この例に続いて、私が欲しかったのは、すべて帝国のリンゴであり、そのリスト内の各リンゴには指定されたタイプの帝国があるリストと、すべてマッキントッシュのリンゴであり、そのリスト内の各リンゴには指定されたタイプのマッキントッシュがあるリストです。

したがって、いくつかを明確にするか、さらに混乱させるために、ここに行きます。

class apple
{
public:
    string variety_name;
    string description;
    apple::apple(string variety_name, string description)
        : variety_name(variety_name), description(description)
    {
    }
};
int _tmain(int argc, _TCHAR* argv[])
{
    // Vlad from Moscow's answer
    std::list<apple> empire(1, apple("empire", "picked yesterday")),
        macintosh(1, apple( "macintosh", "picked yesterday")); 

    // Vaughn Cato's answer
    empire.push_back(apple("empire", "picked today"));
    macintosh.push_back(apple("macintosh", "picked today"));

    for(list<apple>::iterator it=empire.begin(); it != empire.end(); ++it)
    {
        cout << it->variety_name << " " << it->description << endl;
    }

    for(list<apple>::iterator it=macintosh.begin(); it != macintosh.end(); ++it)
    {
        cout << it->variety_name << " " << it->description << endl;
    }

    return 0;
}

ご覧のとおり、毎回保存するよりも一度保存する方が簡単です。私のクラスは明らかに再設計が必要ですが、それによって回答が有効でなくなることはありません。皆様、ご協力ありがとうございました

4

4 に答える 4

6

emplace()確かに、emplace_front()とを使用して、emplace_back()適切なコンストラクターでオブジェクトをその場で構築できます。

std::list<apple> list;
list.emplace(list.end(), "one");
list.emplace_front("two");
list.emplace_back("three");
于 2014-01-12T20:49:50.583 に答える
4

できるよ

std::list<apple> a;
a.push_back(apple("delicious"));
于 2014-01-12T20:49:54.493 に答える
0

これ

apple(string name);

いわゆる変換コンストラクタです。std::string 型のオブジェクトを apple 型のオブジェクトに変換します。タイプ aoole のオブジェクトを待機しているときに、タイプ std::string のオブジェクトを取得するときに、コンパイラによって暗黙的に呼び出すことができます。

コンストラクターを明示的に宣言する場合は、そうすることができません。例えば

explicit apple(string name);

この場合、コンストラクターを明示的に指定する必要があります。例えば

std::list<apple> empire( 1, apple( "empire" ) ); 
于 2014-01-12T20:53:43.840 に答える