是否有可能在迭代器当前指向的容器中查看下一个元素而不更改迭代器?
例如在std :: set中,
int myArray[]= {1,2,3,4};
set <int> mySet(myArray, myArray+4);
set <int>::iterator iter = mySet.begin();
//peek the next element in set without changing iterator.
mySet.erase(iter); //erase the element if next element is n+1
Run Code Online (Sandbox Code Playgroud)
Jam*_*lis 25
C++ 0x添加了一个方便的实用程序函数,std::next它复制迭代器,使其前进,并返回高级迭代器.您可以轻松编写自己的std::next实现:
#include <iterator>
template <typename ForwardIt>
ForwardIt next(ForwardIt it,
typename std::iterator_traits<ForwardIt>::difference_type n = 1)
{
std::advance(it, n);
return it;
}
Run Code Online (Sandbox Code Playgroud)
你可以在你的例子中使用它,如下所示:
if (iter != mySet.end() && next(iter) != mySet.end() && *next(iter) == *iter + 1)
mySet.erase(iter);
Run Code Online (Sandbox Code Playgroud)
Ada*_*erg 16
一般不使用迭代器.不保证迭代器能够非破坏性地运行.典型的例子是一个输入迭代器,它实际上代表了一个底层输入流.
但是,有些东西适用于这种迭代器.一个前向迭代器不通过收集向前移动的行为无效的自身以前的副本.大多数迭代器(包括STL集合的迭代器)至少是正向迭代器,如果不是更多功能版本,则输入迭代器或输出迭代器更受限制.因此,您只需复制迭代器,增加副本并检查它,然后返回到原始迭代器.
所以你的窥视代码:
set <int>::iterator dupe = iter;
++dupe;
// (do stuff with dupe)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23066 次 |
| 最近记录: |