【问题标题】:Displaying the elements of a vector of structure [closed]显示结构向量的元素[关闭]
【发布时间】:2024-01-02 23:32:01
【问题描述】:

我需要显示容器类型为 struct* 的向量的元素。向量的元素指向一个结构。下面是结构体的代码:

struct cheader  //header of a linked list
{
  int id;
  int totald;
  class c* next = NULL;

  cheader(int x, int y)
  {
    id = x;
    totald = y;
  }
};
typedef struct cheader ch;

vector<ch*>present;

存在的向量包含指向该结构的指针。在其他一些函数中添加了指向该结构的指针。 现在,我想写一个函数来显示向量结构的内容。 请建议如何做到这一点。

【问题讨论】:

  • c 是什么?这是一个链接列表还是什么?您只需要在最简单的情况下取消引用并计算值
  • 您在以正常方式迭代向量时遇到任何问题吗?到目前为止,您能展示一下您的显示器代码吗?
  • 作为学习者开始,我建议您遍历矢量内容并按照找到的指针指向cheader 字段,将您想要的任何内容打印到std::cout。有一天你可以学习实现operator&lt;&lt; 重载,所以你可以说std::cout &lt;&lt; present 等等,但没有理由急于这样做。
  • @MarcoA。这是一个链表的标题。暂时我想打印值 id 和 totald,稍后我想遍历其标题指针存储在向量中的链表。

标签: c++ vector stl structure


【解决方案1】:

你可以这样做

for (int i = 0; i < present.size(); ++i)
    cout << present[i]->id << " ";

或在 C++11 中

for (auto p : present)
    cout << p->id << " ";

希望对你有帮助

【讨论】:

    【解决方案2】:

    首先,您必须遍历向量中的所有元素。你必须使用迭代器来实现,就像这样:

    for (vector<ch *>::iterator yourIt = present.begin(); yourIt != present.end(); ++it)
    

    然后,在你的 for 中,你只需要做你想做的事。迭代器是指向向量元素的简单指针。在这种情况下,您的迭代器将是一个 'ch**'。

    获取他的内容,你只需要取消引用你的指针,并使用你想要的变量。例如:

    for (vector<ch *>::iterator yourIt = present.begin(); yourIt != present.end(); ++it)
    {
        cout << "The id : " << (*it)->id << "    And the Totald : " << (*it)->totald << endl;
    }
    

    乍一看可能很奇怪,但 C++ 容器(如向量)非常有用!他们有很多很棒的成员函数!我建议您查看此页面:http://www.cplusplus.com/reference/stl/ ;)

    而且,我只是想补充一下,例如,对于向量,你有一个 '[]' 运算符。这意味着你也不能这样经历:

    for (int i = 0; i < present.size(); ++i)
    {
      cout << (present[i])->id << endl; /* For example ;) */
    }
    

    希望这对你有所帮助;)

    【讨论】:

    • 这几天你可以写for (auto val : present)
    • 当然!我不经常使用它们,因为我更喜欢确切地知道我在做什么。但这当然是主观的。我只是想展示什么是可能的,以及我该如何做这种事情:)。 + 我猜它只在 c++11 中?不是吗?
    • 谢谢..这很有用。