【发布时间】:2016-11-13 07:39:19
【问题描述】:
我不想使用std::distance,因为它会计算从我的迭代器到结尾的整个距离。但是我需要确保从迭代器到最后我有 N 个或更多元素。所以我正在使用下一个代码:
if (std::next(it, n) != c.end()) // c is a std::multimap
{
/// my logic
}
一切都很好,可以使用我的编译器 (g++ (GCC) 4.8.3 20140911 (Red Hat 4.8.3-9)),但我有疑问。在文档(cpprefenece.com && cplusplus.com)中,我找不到有关n > std::distance(it , c.end()) 时的案例或任何其他例外情况的任何信息。所以。我的代码安全吗?或者我应该写我自己的nextIfPossible?
【问题讨论】:
-
我想说不要依赖
std::next,尽管libstd++ 上*map的实现目前可以根据您的需要工作。但在std::vector的情况下,这同样行不通。由于跨容器的行为不相同,因此您不应依赖它。 -
只要你保证容器中至少有
n元素,我觉得没问题。