【问题标题】:c++ iterator vector structc++ 迭代器向量结构
【发布时间】:2015-02-19 10:42:07
【问题描述】:

我创建了一个结构体,其中包含两个 Point3f 类型的字段(继承自另一个标头)。

struct C_Cell {

  Point3f min, max;

};

然后我创建了C_Cell的向量

std::vector< C_Cell> grid;

我已经填写了grid.push_back(c),其中cC_Cell

现在,当我尝试通过

迭代向量时

for (std::vector<C_Cell>::iterator it = grid.begin() ; it != grid.end(); ++it)

在调试的时候,它的类型不是C_Cell而是Point3f,是字段的类型,而且是空的。

我怎样才能正确迭代,以获取C_Cell 类型的单个元素?

谢谢(对不起我的英语!:))

【问题讨论】:

  • 您的标题是标签的集合。它几乎一文不值,而且很少有人会打扰它,因为您没有花时间回答您的问题。您应该使用标题来总结您的问题或问题。
  • 对……你有理由。抱歉,谢谢
  • Google 的第一个结果是我的搜索“cpp 矢量迭代器结构”。

标签: c++ vector struct iterator


【解决方案1】:

您必须取消引用迭代器并像使用它一样使用它

(*it).min

(*it).max

或者,不取消引用,

it->min

解引用迭代器(*it)的类型应该是C_Cell,因为这就是迭代器的工作方式,它们的operator*返回对容器底层类型对象的引用。迭代器的行为与常规指针非常相似(尽管它们不是常规指针,而是代理类),您可以递增/取消引用等。

【讨论】:

  • 是的,当然,但是在调试它时->point3d 类型的最小结果。实际上对象是空的。
  • @user3641602 it->min 具有 Point3f 类型,因为您指向结构内部。我的猜测是,在将结构推回向量之前,您不会对其进行初始化。确保push_back(c)之前,c是一个初始化结构。
  • @user3641602 然后尝试发布一个最小的可编译示例,从您的代码中无法说明还有什么问题。你至少可以吗? cout << (it->min).member for 内的行,看看运行时打印了什么?
猜你喜欢
  • 2015-11-19
  • 2014-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-16
  • 1970-01-01
  • 1970-01-01
  • 2021-11-24
相关资源
最近更新 更多