我有一个基本上是(仅显示相关零件(
的容器类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 */ };
}
};
如您所见,我想为此容器实现迭代器。迭代器应通过映射中的每个节点和迭代器中的每个节点透过节点所指的向量中的每个元素。我在实现迭代器时没有问题,但是在为容器实施end()
时,我遇到了一些困难。
迭代器由两个迭代器组成,对于上端迭代器,major_it
必须是data_t.end()
,但我没有任何初始化minor_it
。
在同一静脉中,当地图为空时,begin()
也会损坏。
有什么想法?
std::vector::iterator
当值initialized:
std::vector<…>::iterator invalid_iter_value = {};
顺便说一句,当默认initialized(即非初始化(时,它可能对您来说足够好。如果major_it
已经到了,则根本不访问minor_it
。
std::vector<…>::iterator unusable_iter_value;
但是,请注意,复制默认限制对象也是非法的,因此,除非您要自定义复制构造函数和操作员,否则价值限制是一个好主意。