gpt4 book ai didi

c++ - 如何获得保证无效的迭代器(对于 vector )?

转载 作者:行者123 更新时间:2023-11-30 02:20:12 26 4
gpt4 key购买 nike

我有一个容器类,它本质上是(只显示相关部分)

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 */ };
}
};

如您所见,我想为这个容器实现迭代器。迭代器应遍历映射中的每个节点,迭代器应遍历该节点引用的 vector 中的每个元素。我在实现迭代器时没有问题,但在为容器实现 end() 时遇到了一些问题。

迭代器由两级迭代器组成,对于后尾迭代器,major_it 必须是data_t.end(),但我不会有什么东西可以初始化 minor_it

同理,本地图为空时,begin()也会被打破。

有什么想法吗?

最佳答案

std::vector::iterator 在值初始化时总是无效的:

std::vector<…>::iterator invalid_iter_value = {};

顺便说一句,它在默认初始化(即未初始化)时不可用,这对您来说可能已经足够了。如果 major_it 已经在最后,那么就不要访问 minor_it

std::vector<…>::iterator unusable_iter_value;

但是请注意,复制默认初始化的对象也是非法的,因此值初始化是个好主意,除非您要自定义复制构造函数和运算符。

关于c++ - 如何获得保证无效的迭代器(对于 vector )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50028711/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com