当有人取消引用我的 end() 迭代器时,我该怎么办
What should I do when someone dereferences my end() iterator?
我正在编写一个带有自定义迭代器的自定义容器类。
我之所以避免使用 STL,是因为我是一个嵌入式 C 人,对 STL 的理解不够充分,无法相信自己会用它编写自定义容器和迭代器。
如果有人试图尊重我的迭代器(使用 (*it)。无论如何() )当它是一过尾时,我得到一个段错误。 这是意料之中的,因为它在内部是一个 NULL 指针。
目前我的 * 覆盖如下所示:
Event& EventList::iterator::operator*()
{
return * m_pBlock->GetAt(m_EventIdx);
}
那么,我该怎么办?
抛出异常? 哪一个? 不过,我试图避免例外。
放弃模拟 STL 并从我的迭代器返回指针或 NULL 指针。
保留全局静态事件实例以用作错误返回值。
别的。
我不得不说,我对返回引用的做法非常怀疑,因为没有办法返回 NULL 引用。 整个想法似乎没有经过深思熟虑。
也许有人可以解释我对返回引用的概念所缺少的是什么。
谢谢。
一般来说,STL 指定自己的迭代器在取消引用 end() 时导致 UB。 你也可以这样做。 因此,您无需在此处执行任何操作即可在各个方面与 STL 兼容。 可能还有其他方面是错误的,但这种行为是完全有效的。
相关文章:
- 我可以使用反向迭代器作为ForwardIt吗
- 为什么我的模板化函数需要从一个迭代器转换到另一个迭代器?
- 我可以将迭代器递增一个整数吗?
- 为什么我在使用 istream 迭代器时会出现 seg 错误?
- 为什么在指向对象的迭代器上调用函数不允许我更改对象本身?
- 我可以在没有堆栈的情况下在二叉搜索树中实现迭代器吗?
- 如何为我的容器实现随机访问迭代器?
- 矢量迭代器在尝试调用函数时使我的程序崩溃
- 我从 std::set 得到const_iterator而不是迭代器
- 我当前实现的双向链表类是否需要重构迭代器 end() 功能?
- 创建一个简单的前向迭代器,该迭代器在循环缓冲区的"end"处自动换行
- 为什么我不能在 c++ 中"map"的迭代器中使用"+1"?
- 如果我的容器位于两个现有值之间,那么伪造迭代器类别是否合理
- 随机访问迭代器:我错过了什么?
- 我的代码在作为参数传入 .begin() 时不起作用,但在我将 .begin() 转换为迭代器后工作
- 如果我有一个指向矢量元素的指针,而不是迭代器,如何删除它?
- 我可以将映射迭代器与 OpenMP 并行使用吗?
- 传入一个迭代器,该迭代器只迭代满足特定条件的元素
- 我的map迭代器不能访问map的每个元素,我该如何修复它?
- 当有人取消引用我的 end() 迭代器时,我该怎么办