我想知道是否可以使用 nullptr 或某种通用的结束迭代器。
例如:
// a.b->cdef().g->bdf() is a std::map<int, int>
std::unordered_map<int, int> copy(a.b->cdef().g->bdf().begin(), a.b->cdef().g->bdf().end());
是您通常编写的用于指定开始和结束以初始化新 map 的内容。
如果我只想复制整个 map ,为什么需要指定结束标记。
我更喜欢这样的东西:
std::unordered_map<int, int> copy(a.b->cdef().g->bdf().begin(), nullptr);
或
std::unordered_map<int, int> copy(a.b->cdef().g->bdf().begin());
或
std::unordered_map<int, int> copy(a.b->cdef().g->bdf().begin(), std::unordered_map::end);
编辑:我将示例从 std::list
最佳答案
回答问题“是否可以使用 nullptr 而不是 end()?”
没有。
请思考容器和迭代器是如何实现的。容器知道它的开始和结束迭代器。迭代器知道如何递增、递减以及将自身与另一个迭代器进行比较。
所以以 vector 为例。 begin 迭代器如何知道在哪里停止递增? iter == nullptr
如何知道何时返回 true 以便停止?
或者取循环链表。它没有真正的结局。它仅在迭代器再次等于开始迭代器时停止。 nullptr 在那里结束意味着什么?
如果您考虑实现,就会明白为什么答案是“否”。
关于c++ - 使用 nullptr 而不是结束迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29938457/