当前位置: 首页 > 编程笔记 >

C ++中的组合迭代器

程禄
2023-03-14
本文向大家介绍C ++中的组合迭代器,包括了C ++中的组合迭代器的使用技巧和注意事项,需要的朋友参考一下

假设我们必须设计一个Iterator类,其中包含少量操作-

  • 定义一个构造函数,该构造函数将以不同的小写英文字母排序的字符串字符和一个数字CombineLength作为参数。

  • 定义一个函数next(),该函数将按字母顺序返回长度combinationLength的下一个组合。

  • 定义另一个函数hasNext(),当且仅当存在下一个组合时,该函数才返回True。

所以如果输入像-

CombinationIterator iterator = new CombinationIterator("xyz", 2);
iterator.next(); // returns "xy"
iterator.hasNext(); // returns true
iterator.next(); // returns "xz"
iterator.hasNext(); // returns true
iterator.next(); // returns "yz"
iterator.hasNext(); // returns false

为了解决这个问题,我们将遵循以下步骤-

  • 创建一个字符串数组梳,并索引idx

  • 定义一个方法makeCombs(),它将使用字符串s,整数变量l,一个临时字符串(最初为空)和一个start(初始为0)。其定义如下-

  • 如果temp的大小= l,则将temp插入梳子并返回

  • 因为我在范围内开始到s的大小

    • makeCombs(s,l,temp + s [i],i + 1)

  • printVector()方法将字符串数组作为输入,这将显示该数组的元素

  • 定义构造函数如下:它将使用字符串c和cl,

  • 调用makeCombs(c,cl),设置idx:= 0

  • next()方法将增加idx并返回comb [idx-1]

  • hasNext()如果idx与梳的大小不同,则该方法将返回true,否则返回false。

例子(C ++)

让我们看下面的实现以更好地理解-

#include <bits/stdc++.h>
using namespace std;
class CombinationIterator {
public:
   vector <string> combs;
   int idx;
   void makeCombs(string s, int l, string temp ="", int start = 0){
      if(temp.size() == l){
         combs.push_back(temp);
         return;
      }
      for(int i = start; i < s.size(); i++){
         makeCombs(s, l, temp + s[i], i + 1);
      }
   }
   void printVector(vector <string> v){
      for(int i = 0; i < v.size(); i++){
         cout << v[i] << "\n";
      }
      cout << endl;
   }
   CombinationIterator(string c, int cl) {
      makeCombs(c, cl);
      idx = 0;
   }
   string next() {
      idx++;
      return combs[idx - 1];
   }
   bool hasNext() {
      return !(idx == combs.size());
   }
};
main(){
   CombinationIterator ob("xyz", 2);
   cout << (ob.next()) << endl;
   cout << (ob.hasNext()) << endl;
   cout << (ob.next()) << endl;
   cout << (ob.hasNext()) << endl;
   cout << (ob.next()) << endl;
   cout << (ob.hasNext()) << endl;
}

输入值

Initialize with “xyz” and 2, then call next() and hasNext() multiple times

输出结果

xy
1
xz
1
yz
0
 类似资料:
  • 问题 你想迭代遍历一个集合中元素的所有可能的排列或组合 解决方案 itertools模块提供了三个函数来解决这类问题。 其中一个是 itertools.permutations() , 它接受一个集合并产生一个元组序列,每个元组由集合中所有元素的一个可能排列组成。 也就是说通过打乱集合中元素排列顺序生成一个元组,比如: >>> items = ['a', 'b', 'c'] >>> from it

  • 本文向大家介绍C ++中的RLE迭代器,包括了C ++中的RLE迭代器的使用技巧和注意事项,需要的朋友参考一下 假设我们必须创建一个迭代器,该迭代器遍历游程编码序列。此处,迭代器通过调用RLEIterator(int [] A)进行初始化,其中A是序列的游程长度编码。因此我们可以说,对于所有偶数i,A [i]告诉我们在序列中重复非负整数值A [i + 1]的次数。这里的迭代器支持一个功能- nex

  • 我正在创建一个纸牌游戏,并希望迭代所有可能的纸牌组合。 例如(红心A,红心2),(红心A,黑桃2),(红心A,梅花2)等 我在用Java做这个 目前我有这个: 首先,我有 这是一副包含所有卡片的牌。然后我创建一个 现在我想遍历所有没有重复的卡片。 然而,我得到了一个。有人能给我一些关于如何做得更好的提示吗?

  • 本文向大家介绍C ++中的输入迭代器,包括了C ++中的输入迭代器的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将讨论一个程序,以了解C ++中的输入迭代器。 输入迭代器是STL中五个最弱,最简单的迭代器之一。它们主要用于串行输入操作,在该操作中,每个值都被读取为一个值,然后迭代器移至下一个值。 示例 输出结果

  • 迭代器可被用来访问一个容器类的所包函的全部元素,其行为像一个指针。举一个例子,你可用一个迭代器来实现对vector容器中所含元素的遍历。有这么几种迭代器如下: 迭代器 描述 input_iterator 提供读功能的向前移动迭代器,它们可被进行增加(++),比较与解引用(*)。 output_iterator 提供写功能的向前移动迭代器,它们可被进行增加(++),比较与解引用(*)。 forwar

  • 本文向大家介绍C ++程序中的迭代器无效,包括了C ++程序中的迭代器无效的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将讨论一个程序,以了解C ++中的迭代器失效。 在容器对象的元素上进行迭代时,有时如果我们不应用绑定检查,它可能会失效。这主要是由于容器对象的形状和大小的变化而发生的。 示例 输出结果 (可能还会发生,添加新元素时,矢量将被复制到新位置,而我们的迭代器仍指向旧位置,这