【问题标题】:Acessing element of vector of vectors of pointers访问指针向量的向量元素
【发布时间】:2018-12-16 14:50:43
【问题描述】:

我有一个班级成员:

std::vector<std::vector<CellState*> > State;

Cellstate 类型是一个结构体:

struct CellState
{
bool state;
int x;
int y;
}; 

使用同一个类的方法,我想读/写这个结构的元素。我能想到的所有方法都失败了。我有很多关于 C++ 和 STL 的好书,但似乎找不到相关信息。我不知道如何取消引用这种指针。

明确地说,我想这样做:

State[x][y].state = FALSE;

除了明显更正以说明指针取消引用。

【问题讨论】:

  • 为什么没有std::vector&lt;std::vector&lt;CellState&gt; &gt; State;
  • @NeilButterworth 虽然这可能比std::vector&lt;std::vector&lt;CellState*&gt; &gt; State; 更好,但我不愿意相信需要一个细胞状态列表的列表,因为细胞可能会形成它们所建模的任何矩形块。跨度>
  • @Baum 我们似乎有向量的向量,而不是列表的列表。
  • 我需要指针,因为 Windows API 在这种情况下需要指针。另外,我真的很好奇如何做到这一点!
  • @NeilButterworth std::vector 实现了一个事物列表,尽管它不被称为“列表”。它恰好将其元素存储在连续内存中这一事实并没有改变这一事实。

标签: c++ pointers stl


【解决方案1】:

State[x][y] 是一个指针,所以你必须使用-&gt; 而不是. 来访问成员。例如。

State[x][y]->state = false;

另请注意,仅当xy 在向量范围内时才有效。如果您提前知道最大尺寸,可以通过像这样声明向量来解决这个问题:

std::vector<std::vector<CellState *>> State(Width, std::vector<CellState *>(Height));

其中Widthx 方向的大小,Height 是y 方向的大小。


顺便说一句,通常按行、列顺序而不是列、行顺序来索引。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    • 2021-12-10
    • 1970-01-01
    • 2011-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多