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 stdor using std::list,这是指向类/结构名称的对象列表的指针。要将对象放入其中,首先需要对其进行初始化:

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

在 C++ 中,这很可能是一个 STL 列表。你可以在这里找到一些文档:http ://www.sgi.com/tech/stl/List.html

于 2012-06-03T05:11:44.367 回答
0

它是一个STL list变量、结构或对象的链接列表。它支持任意位置的插入、删除操作。在list < NAME > * m_ofListm_oflist 中是一个指向Name 对象列表的指针。这是关于STL 列表的一个很好的教程。

于 2012-06-03T05:20:13.897 回答