我正在寻找一种可读、优雅的方式来在 C++ 中执行以下操作,此处以 Python 显示:
for datum in data[1:]:
# do work.
有问题的数据上的迭代器可能不支持随机访问迭代器,所以我不能只使用:
for (mIter = data.begin() + 1; mIter != data.end(); mIter++)
我想出的最好的方法如下:
iterable::iterator mIter = data.begin();
for (mIter++; mIter != allMjds.end(); mjdIter++) {
// do work.
}
它不是太长,但它几乎不是说明性的——乍一看它实际上看起来像是一个错误!
我猜另一个解决方案是有一个“第 n 个元素”辅助函数。有没有更简洁的方法?
原文由 user511493 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以使用
std::next(iter, n)
进行线性时间提前。您也可以使用标准std::advance
算法,尽管它使用起来并不简单(它通过非常量引用获取迭代器并且不返回它)。例如,
或者,
请注意,您必须确保
data.size() >= 1
,否则代码将以灾难性方式失败。