• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:複数のオブジェクトと生成とその組み合わせ)

複数のオブジェクトと生成とその組み合わせ

このQ&Aのポイント
  • 外部からの入力で複数のオブジェクトを生成し、それらの可能な組み合わせをつくる方法についての質問です。
  • オブジェクトの生成と組み合わせを管理するためのアルゴリズムが思いつかずに困っています。
  • 解決策があれば教えていただきたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

ん~, なんかよくわからん.... 「オブジェクトが複数種類作られることを想定して」の「オブジェクト」というのは「Apple」とか「Banana」とか言ってるやつのこと? でも「オブジェクトの種類 = クラス」としては 1つだしなぁ.... 効率を無視すれば vector<vector<mochimono> > enumerate(const vector<mochimono> &items) { vector<vector<mochimono> > ret; for (auto item: items) { vector<vector<mochimono> > current = ret; ret.clear(); for (auto &bucket: current) { ret.push_back(bucket); for (int i = 0; i < item.maximum_numbers; ++i) { bucket.push_back(item); ret.push_back(bucket); } } } return ret; } のような感じ (要 C++0x) でいけると思うんだが.

hydrozoa
質問者

お礼

具体的なコードありがとうございました。

hydrozoa
質問者

補足

わかりにくくて申し訳ないです。 >「オブジェクトが複数種類作られることを想定して」の >「オブジェクト」というのは「Apple」とか「Banana」とか >言ってるやつのこと? でも「オブジェクトの種類 = クラス」 >としては 1つだしなぁ.... 「オブジェクト」とはApple, Banana等のことです。ですので「オブジェクトの種類が複数」というのは正しくなかったですね。。。 クラスはmochimonoという1種類でそれをつかってApple.Banana,さらにPeachなどオブジェクトが複数つくられる、ということを意図しました。

その他の回答 (1)

回答No.2

こんなん↓でいいかしら #include <iostream> #include <array> #include <algorithm> #include <string> using namespace std; template<typename T, int N> bool generate_next(array<T,N>& ar, const array<T,N>& lm) { for ( int digit = 0; digit < N; ++digit ) { if ( ++ar[digit] == lm[digit] ) { ar[digit] = 0; } else { break; } } return any_of(ar.begin(), ar.end(), [](int n) { return n != 0; }); } int main() { const int N = 3; array<string,N> fruits = { "apple", "banana", "cherry" }; array<int,N> limits = { 3, 2, 2 }; array<int,N> counts = { 0, 0, 0 }; do { for ( int i = 0; i < N; ++i ) { cout << fruits[i] << ":" << counts[i] << ' '; } cout << endl; } while ( generate_next(counts, limits) ); } --- 実行結果 --- apple:0 banana:0 cherry:0 apple:1 banana:0 cherry:0 apple:2 banana:0 cherry:0 apple:0 banana:1 cherry:0 apple:1 banana:1 cherry:0 apple:2 banana:1 cherry:0 apple:0 banana:0 cherry:1 apple:1 banana:0 cherry:1 apple:2 banana:0 cherry:1 apple:0 banana:1 cherry:1 apple:1 banana:1 cherry:1 apple:2 banana:1 cherry:1

hydrozoa
質問者

お礼

詳しいコードありがとうございます。まさにこんな感じの使い方をしたかったのです。考えていたよりずっと短いコードで実現されていておどろきました。