use*_*493 12 c++ iterator coding-style readability
我正在寻找一种可读,优雅的方式在C++中执行以下操作,这里显示在Python中:
for datum in data[1:]:
do work.
Run Code Online (Sandbox Code Playgroud)
有问题的数据上的迭代器可能不支持随机访问迭代器,所以我不能只使用:
for (mIter = data.begin() + 1; mIter != data.end(); mIter++)
Run Code Online (Sandbox Code Playgroud)
我提出的最好的是以下内容:
iterable::iterator mIter = data.begin();
for (mIter++; mIter != allMjds.end(); mjdIter++) {
do work.
}
Run Code Online (Sandbox Code Playgroud)
它不是太冗长,但它几乎不是说明性的 - 乍一看它实际上看起来像是一个错误!
另一种解决方案是拥有一个"第n个元素"辅助函数,我猜.任何冷静的想法?
ava*_*kar 23
您可以使用std::next(iter, n)线性时间推进.您也可以使用标准std::advance算法,虽然它不是那么简单(它使用非const引用的迭代器并且不返回它).
例如,
for (mIter = std::next(data.begin()); mIter != data.end(); ++mIter)
Run Code Online (Sandbox Code Playgroud)
要么,
mIter = data.begin();
std::advance(mIter, 1);
for (; mIter != data.end(); ++mIter)
Run Code Online (Sandbox Code Playgroud)
请注意,您必须确保data.size() >= 1,否则代码将以灾难性方式失败.
#include <iterator>
iterator iter = data.begin();
for (advance(iter, 1); iter != data.end(); ++iter)
{
// do work
}
Run Code Online (Sandbox Code Playgroud)
但是,它依赖于> = 1元素data来避免异常.
| 归档时间: |
|
| 查看次数: |
11899 次 |
| 最近记录: |