gpt4 book ai didi

c++ - 使用 nullptr 而不是结束迭代器

转载 作者:太空宇宙 更新时间:2023-11-04 15:17:08 31 4
gpt4 key购买 nike

我想知道是否可以使用 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 更改为 std::unordered_map 。没有从 std::map 到 std::unordered_map 的复制构造函数。

最佳答案

回答问题“是否可以使用 nullptr 而不是 end()?”

没有。

请思考容器和迭代器是如何实现的。容器知道它的开始和结束迭代器。迭代器知道如何递增、递减以及将自身与另一个迭代器进行比较。

所以以 vector 为例。 begin 迭代器如何知道在哪里停止递增? iter == nullptr 如何知道何时返回 true 以便停止?

或者取循环链表。它没有真正的结局。它仅在迭代器再次等于开始迭代器时停止。 nullptr 在那里结束意味着什么?

如果您考虑实现,就会明白为什么答案是“否”。

关于c++ - 使用 nullptr 而不是结束迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29938457/

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