gpt4 book ai didi

c++ - 从特定索引遍历集合到特定索引

转载 作者:太空宇宙 更新时间:2023-11-04 12:07:29 25 4
gpt4 key购买 nike

我有一个迭代器。假设我需要从某个特定点开始而不是从头开始遍历集合。此外,我很难获取存储在集合中的值,因为它们是指针。那么我如何修改我的代码以从不是开始的点遍历我的集合。 ?

代码如下:

for(iter=make.at(level).begin();iter!=make.at(level).end();iter++)
{
Function(*iter);
}

使用这个会报错:

for(iter=make.at(level).begin()+10;iter!=make.at(level).end();iter++)
{
Function(*iter);
}

最佳答案

有不同类型的迭代器:ForwardIteratorBidirectionalIteratorRandomAccessIterator

ForwardIterator 允许您使用增量运算符仅向前移动。 BidirectionalIterator 允许两个方向。 RandomAccessIterator 允许任何进步,包括operator+operator-

您考虑的对象是 RandomAccessIterator,就像在 std::vector 中找到的那样。不过,std::set 使用的是 BidirectionalIterator。这意味着您只能递增和递减。

因此,您需要将迭代器置于循环之外并向前推进十次。为简单起见,std::advance 执行此操作,并且对 BidirectionalIteratorForwardIterator 具有不同的兼容性(线性时间,因为只有一次一个增量)和 RandomAccessIterator(由于 operator+ 而使时间恒定)。

std::set<T>::iterator iter = make.at(level).begin(); //more C++03 way
auto iter = std::begin (make.at(level)); //more C++11 way
std::advance (iter, 10); //start iterator 10 elements past beginning
for (...)

关于c++ - 从特定索引遍历集合到特定索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11391043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com