【发布时间】:2019-01-16 15:08:27
【问题描述】:
我有一个二维向量,它是一个类成员。
std::vector<std::vector<int>> myvec;
无论如何,我可以有一个迭代器作为公共类成员迭代整个行和列吗?然后我可以用它从向量中获取元素。
如果向量有 3 行 4 列,我可以通过使用 iterator+5 来访问 myvec[1][1] 的 5 个元素?
而且,这在某种程度上类似于 C# 中的 IEnumerable 中的 GetEnumerator() 吗?
谢谢
【问题讨论】:
-
你可以使用 C 风格的索引。由于内存是为向量连续分配的
-
@yadhu 不适用于嵌套向量。
-
IEnumerable<IEnumerable<T>>也无法使用类似的方法 AFAIK 访问。 -
@appleapple 我认为他们可以,比如这里:
public IEnumerator<T> GetEnumerator() { int i = 0; foreach (var block in _list) foreach (var e in block) if (i++ < Count) yield return e; else yield break; } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } -
@mawahballah 您可以编写自己的自定义迭代器类型。但它不会像在 C# 中创建 IEnumerable 那样容易编写。此外,一个好的向量迭代器应该是一个随机访问迭代器,而 IEnumerable 不是