我有一个容器类,基本上(仅显示相关部分)
class Foo {
typedef std::map<int, std::vector<int>> data_t;
data_t data;
struct iterator {
data_t::iterator major_it;
data_t::mapped_type::iterator minor_it;
// ...
};
iterator begin();
iterator end() {
return { data.end(), /* XXX */ };
}
};
如您所见,我想为此容器实现迭代器。迭代器应遍历map中的每个节点,并通过节点引用的向量中的每个元素进行迭代。我没有问题实现迭代器,但是我在容器上实现end()
时遇到了一些麻烦。
迭代器由两个级别的迭代器组成,对于过去的迭代器,major_it
必须是data_t.end()
,但我没有任何东西可以初始化{{1} }。
同样地,当地图为空时,minor_it
也会被打破。
有什么想法吗?
答案 0 :(得分:3)
std::vector::iterator
始终无效:
std::vector<…>::iterator invalid_iter_value = {};
顺便提一下,当默认初始化(即未初始化)时,它不可用,这对你来说可能已经足够了。如果major_it
已经结束,则只需访问minor_it
。
std::vector<…>::iterator unusable_iter_value;
但是,请注意,复制默认初始化对象也是非法的,因此除非您自定义复制构造函数和运算符,否则值初始化是个好主意。