4

私は宿題に取り組んでおり、これが実際に何として定義されているのか知りたいと思っていました。

list < NAME > * m_ofList

名前の由来は次のstructとおりです。

typedef struct name
{
    int age;
    int height;
} NAME;

私はそれが何であるかを知りたいので、それに挿入する方法またはそれにアクセスする方法を知っています:push_back、、などinsert

だから私は今これを理解していますが、ある種のメモリアクセスのために立ち往生しています:それはセグメンテーション違反を引き起こし、私はこれを理解することができませんでした。新しいリストをどこで初期化する必要がありますか?コンストラクターや関数では機能しません。参考までに、これはプライベートリストであるため、メンバー関数(つまり、m_ofList)にのみ使用できます。誰かが助けたいなら、私はコードを作成することができます...

4

4 に答える 4

8

using namespace stdまたはと仮定するとusing std::list、それはクラス/構造体 NAME のオブジェクトのリストへのポインターです。オブジェクトを配置するには、まず初期化する必要があります。

m_ofList = new list<NAME>;

また:

m_ofList = &(some already initialized list of NAME objects);

次に、アイテムを入れることができます:

NAME x;
x.age = 15;
x.height = 150;
m_ofList->push_back(x);
m_ofList->insert(m_ofList->begin(), x);

でリストを動的に割り当てた場合は、new使い終わったら適切に破棄する必要があります。

delete m_ofList;

あなたへの私の質問は、そもそもなぜそれがポインターなのですか? 次のように(必要に応じて)宣言するだけです。

list<Name> m_ofList;

そうすれば、廃棄の心配はありません。これは、スコープ ルールによって処理されます。

于 2012-06-03T05:18:29.347 に答える
1

リストに保持するために選択したデータ型に関係なく、メンバー関数は同じままです。
STL リスト コンテナーに対して呼び出すことができるメンバー関数に関するドキュメントは、こちらにあります
リストはテンプレートと呼ばれる構造で構築されているため、任意のデータ型を保持するリストを作成できます。テンプレートを使用すると、さまざまなデータ型のリストを作成できます。
例:

#include <list>
#include <string>
#include <cstdlib>


int main(){

    //here is a list that can only hold integers
    std::list<int> list1{1,2,3,4,5};

    //here is a list that can only hold characters
    std::list<char> list2{'a','b','c','d','e'};

    //we can create a new type to represent a person
    struct person{
        std::string name;
        int age;
        int height;

        person(std::string const& name_, int const& age_, int const& height_):
        name(name_), age(age_) ,height(height_){}
    };

    //and now that we have a new person type, we can create a list to hold people
    std::list<person> list3{{"John",21,70},{"Jane",20,68}};

    return EXIT_SUCCESS;
}

g++ -std=c++0x -o main main.cpp でコンパイル

于 2012-06-03T05:34:45.457 に答える
0

これは、STL list変数、構造体、またはオブジェクトのリンクされたリストです。任意の位置での挿入、削除操作をサポートしますlist < NAME > * m_ofList。m_oflist では、Name オブジェクトのリストへのポインターです。ここにSTL listに関する優れたチュートリアルがあります。

于 2012-06-03T05:20:13.897 に答える
0

C++ では、これは STL List である可能性が最も高いです。ここでいくつかのドキュメントを見つけることができます: http://www.sgi.com/tech/stl/List.html

于 2012-06-03T05:11:44.367 に答える