我想知道是否可以使用nullptr或某种通用的end迭代器.
例如:
// 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());
Run Code Online (Sandbox Code Playgroud)
您通常会编写以指定初始化新地图的开始和结束.
如果我只想复制整个地图,为什么还需要指定结束标记.
我更喜欢这样的东西:
std::unordered_map<int, int> copy(a.b->cdef().g->bdf().begin(), nullptr);
Run Code Online (Sandbox Code Playgroud)
要么
std::unordered_map<int, int> copy(a.b->cdef().g->bdf().begin());
Run Code Online (Sandbox Code Playgroud)
要么
std::unordered_map<int, int> copy(a.b->cdef().g->bdf().begin(), std::unordered_map::end);
Run Code Online (Sandbox Code Playgroud)
编辑:我将示例从std :: list <int>更改为std :: unordered_map <int,int>.从std :: map到std :: unordered_map没有复制构造函数.
要回答问题,"是否可以使用nullptr而不是end()?"
没有.
请考虑如何实现容器和迭代器.容器知道它的开始和结束迭代器.迭代器知道如何递增,递减并将自身与另一个迭代器进行比较.
所以以矢量为例.begin迭代器如何知道停止递增的位置?怎么会iter == nullptr知道何时返回真实所以它可以停止?
或者采用循环链表.它没有真正的结局.它只在迭代器再次等于begin迭代器时停止.nullptr甚至意味着什么结束?
如果你考虑实施,你会明白为什么答案是"不".