跳过随机迭代器的一个条目
Skip an entry of a random iterator
假设我们有一个函数foo
,它做一些的事情到*firsta
和*lastb
之间的所有元素:
foo(RandomAccessIterator1 firsta,RandomAccessIterator1 lasta){
for (RandomAccessIterator1 it=firsta;it!=lasta+1;it++){
//here stuff happens...
}
}
问题a(:有没有办法跳过索引firsta<i<lastb
修改CCD_ 5的输入——例如随机迭代器,换句话说,在不改变foo
本身的情况下,仅仅改变其输入?
--不幸的是,我想跳过的索引不在边缘(它们通常位于firsta
和lasta
之间(和foo
是一个复杂的鸿沟&不可接受的征服算法在原始数组的子集上调用迭代器正在指向。
问题b(:如果做a(是可能的,那么做的成本是多少?常数还是依赖于(lasta-firsta)
?
最好的方法是使用知道如何跳过该元素的迭代器。不过,一个更通用的想法是迭代器,它只是在引擎盖下的两个独立范围上进行迭代。我不知道boost中有什么能做到这一点,所以,我刚刚总结了一个:http://coliru.stacked-crooked.com/a/588afa2a353942fc
不幸的是,检测跳过哪个元素的代码会给每个迭代器增量增加极少量的开销,因此从技术上讲,开销与lasta-firsta
成正比。实际上,在vector::iterator
或char*
周围使用这个包装器应该会使其达到与std::deque::iterator
大致相同的性能水平,所以这并不是一个主要的放缓。
答案可能有点挑剔,但您可以调用foo(firsta,i-1)
和foo(i+1,lastb)
或类似的东西来获得所需的效果。
相关文章:
- 使用std::mt19937从字符串中返回一个随机单词
- 如何生成一个随机的 n 位数,其中 n 是任意的
- 当我尝试使用它时,Scanf 会抛出一个随机异常(scanf_s 也是如此)
- 我将如何在 cpp 中生成一个随机且独特的标题
- 从C++数组中选择一个随机元素
- 如何更改此notify_one以便它选择一个随机线程
- C++ 在运行时选择一个随机对象
- C++ 制作一个随机数字/字母生成器,代码中有问题
- 将一个随机的字符序列和int序列解析为单独的向量
- C 从向量的子集返回一个随机值
- 如何创建一个随机访问式的Rreference以访问.RC文件中定义的资源
- 在C 11中生成一个随机字符串
- 创建一个随机的std ::向量,其中一个和零C
- C/C++ - 生成一个随机字符串会覆盖以前的字符串(请参阅下面的代码)
- 需要在指定范围内生成一个随机整数
- 生成一个随机种子给srand()-不是时间(NULL)
- 选择一个随机方块并生成一个随机数
- 是否有一个随机函数可以生成 0 到 1 之间的数字
- 随机坐标和禁用下一个随机集的移动
- 如何在QtCreator(Linux Ubuntu)中编译和运行一个随机的单个C++文件