【发布时间】:2016-08-25 12:01:39
【问题描述】:
我是 C++ 新手(来自 C 和 Java),想编写一个简单的数独求解器作为练习。我正在考虑使用迭代器来迭代数独字段的行/列/块并阅读this c++Reference page。
现在我有两个问题:
对我来说似乎存在两种迭代器 Input-(read only)/Output(write only)-iterators 并且有不同的种类输入迭代器(Contiguous/RandomAccess/etc)。如果我想遍历数独字段,我希望能够读取 和 写入元素。我的迭代器应该扩展什么迭代器?
我实际上认为我需要两个迭代器,一个迭代不同的行/列/块,另一个迭代这些行/列/块中的元素。在这里使用的通用命名约定是什么?我在考虑
RowIterator迭代行和RowElementIterator迭代RowIterator指向的对象内包含的元素。
我也希望能在 C++ 迭代器中引入良好的资源。
【问题讨论】:
-
这里给你一个很好的参考:en.cppreference.com/w/cpp/iterator
-
迭代器是一个通用概念,用于访问容器中的元素。我怀疑迭代器是访问数独网格元素的自然方式。
-
没有办法扩展迭代器(除了手动复制和添加行为)。您可以从迭代器继承,但这不一样并且有很多缺点。实际上没有理由继承任何东西。您只需从头开始编写一个迭代器。允许读取和写入的迭代器是常态,只有流需要技巧,例如只读或只写迭代器。也就是说,您可能只想使用简单的
int索引。 -
@NathanOliver 此页面包含在我的问题中...
-
@nwp 我想要一种方便的方法来遍历数独块,使用
int索引会变得非常丑陋。例如,当第一个数独块的索引为{ 0, 1, 2, 9, 10, 11, 18, 19, 20 }。