【问题标题】:C++ lists and pointersC++ 列表和指针
【发布时间】:2012-06-07 17:51:13
【问题描述】:

我正在做作业,想知道这实际上是什么定义:

list < NAME > * m_ofList

名称来自struct,如下所示:

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

我想知道它是什么,所以我知道如何插入或访问它:push_backinsert

所以我现在明白了,但由于某种类型的内存访问,我被卡住了:它会产生分段错误,我一直无法弄清楚。 我需要在哪里初始化我的新列表?它在构造函数或函数中不起作用。仅供参考,它是一个私有列表,因此它只能用于成员函数(即 m_ofList)。如果有人愿意帮忙,我可以生成代码...

【问题讨论】:

  • 请告诉我们 list &lt; NAME &gt; * m_ofListstruct 不是来自教你 C++ 的人?
  • 为什么typedef struct 用于 C++?
  • 它不是来自我,所以我不认为我可以改变它......

标签: c++ pointers linked-list member-functions


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    假设using namespace stdusing 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;
    

    那么您就不必担心处理它了。这将由范围规则来处理。

    【讨论】:

    • 这有帮助,但是,当我初始化它(使用 Xcode)或使用 unix 时,我得到一个 EXC_BAD_ACCESS 或 seg fault 11...你能解释一下吗?
    • @BrianKnowlton:我需要看一个更完整的例子。最好是完整的。
    • 当您尝试访问无效的内存位置时会出现段错误。您可以使用调试器向我们展示您的回溯吗?
    • 程序收到信号EXC_BAD_ACCESS,无法访问内存。原因:13 在地址:0x0000000000000000 0x0000000100001f5b in CGraph::AddEdge ()
    • @BrianKnowlton:当我说“完整示例”时,我指的是您的代码,而不是错误消息,很抱歉造成混淆。
    【解决方案3】:

    它是一个STL list,它是一个变量、结构或对象的链接列表。它支持在任意位置插入、删除操作。在list &lt; NAME &gt; * m_ofList m_oflist 是一个指向Name 对象列表的指针。这是STL list的一个很好的教程。

    【讨论】:

      【解决方案4】:

      无论您选择在列表中保留何种数据类型,成员函数都将保持不变。
      有关可以为 STL 列表容器调用哪些成员函数的文档,请参见 here
      您可以创建包含任何数据类型的列表,因为它们是使用称为模板的构造构建的。模板允许您创建不同数据类型的列表。
      示例:

      #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 编译

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多