假设我们必须创建一个迭代器,该迭代器遍历游程编码序列。此处,迭代器通过调用RLEIterator(int [] A)进行初始化,其中A是序列的游程长度编码。因此我们可以说,对于所有偶数i,A [i]告诉我们在序列中重复非负整数值A [i + 1]的次数。这里的迭代器支持一个功能-
next(int n):此函数将耗尽接下来的n个元素(n> = 1),并返回以此方式耗尽的最后一个元素。因此,如果没有剩余要用尽的元素,则next返回-1。
假设我们从A = [3,8,0,9,2,5]开始,它是序列[8,8,8,5,5]的行程编码。这样做是因为该序列可以读为“三八,零九,二五”。因此,在用A初始化它们之后,如果我们调用next(2),next(1),next(1),next(2),则最终结果将是[8,8,5,-1]。
为了解决这个问题,我们将遵循以下步骤-
在初始化程序中,将数组初始化为A,然后设置index:= 0
在next()方法中,将n作为输入。这将如下工作
而索引<A的大小和n> A [索引]
n:= n – A [index],并将索引增加2
如果索引>数组A的大小,则返回-1
A [index]:= A [index] – n
返回A [索引+ 1]
让我们看下面的实现以更好地理解-
#include <bits/stdc++.h> using namespace std; class RLEIterator { public: vector <int> A; int idx = 0; RLEIterator(vector<int>& A) { this->A = A; idx = 0; } int next(int n) { while(idx < A.size() && n > A[idx]){ n -= A[idx]; idx += 2; } if(idx >= A.size()) return -1; A[idx] = A[idx] - n; return A[idx + 1]; } }; main(){ vector<int> v = {3,8,0,9,2,5}; RLEIterator ob(v); cout << (ob.next(2)) << endl; cout << (ob.next(1)) << endl; cout << (ob.next(1)) << endl; cout << (ob.next(2)) << endl; }
Initialize with [3,8,0,9,2,5] and call next(2), next(1), next(1), next(2)
输出结果
8 8 5 -1
本文向大家介绍C ++中的组合迭代器,包括了C ++中的组合迭代器的使用技巧和注意事项,需要的朋友参考一下 假设我们必须设计一个Iterator类,其中包含少量操作- 定义一个构造函数,该构造函数将以不同的小写英文字母排序的字符串字符和一个数字CombineLength作为参数。 定义一个函数,该函数将按字母顺序返回长度combinationLength的下一个组合。 定义另一个函数,当且仅当存在
本文向大家介绍C ++中的输入迭代器,包括了C ++中的输入迭代器的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将讨论一个程序,以了解C ++中的输入迭代器。 输入迭代器是STL中五个最弱,最简单的迭代器之一。它们主要用于串行输入操作,在该操作中,每个值都被读取为一个值,然后迭代器移至下一个值。 示例 输出结果
迭代器可被用来访问一个容器类的所包函的全部元素,其行为像一个指针。举一个例子,你可用一个迭代器来实现对vector容器中所含元素的遍历。有这么几种迭代器如下: 迭代器 描述 input_iterator 提供读功能的向前移动迭代器,它们可被进行增加(++),比较与解引用(*)。 output_iterator 提供写功能的向前移动迭代器,它们可被进行增加(++),比较与解引用(*)。 forwar
本文向大家介绍C ++程序中的迭代器无效,包括了C ++程序中的迭代器无效的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将讨论一个程序,以了解C ++中的迭代器失效。 在容器对象的元素上进行迭代时,有时如果我们不应用绑定检查,它可能会失效。这主要是由于容器对象的形状和大小的变化而发生的。 示例 输出结果 (可能还会发生,添加新元素时,矢量将被复制到新位置,而我们的迭代器仍指向旧位置,这
本文向大家介绍C ++编程中的输出迭代器,包括了C ++编程中的输出迭代器的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将讨论一个程序,以了解C ++中的输出迭代器。 输出迭代器是主要的五个迭代器的一部分。它们与输入迭代器的功能相反,它们可以被分配值,但不能被访问以获取值。 示例 输出结果
迭代器模式(Iterator Pattern) 目前已经是一个没落的模式, 基本上没人会单独写一个迭代器, 除非是产品性质的开发, 其定义如下: 它提供一种方法访问一个容器对象中各个元素, 而又不需暴露该对象的内部细节。