• ベストアンサー
※ 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
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • クラスメソッドのみのクラスのオブジェクト生成は不可??

    あるテキストのjavaの問題です。 public class Draw{   static void pixel(int x,int y){     /*座標(x、y)に点を描画*/   }   static void line(int x1,int y1,int x2,int y2){     /*座標(x1、y1)~(x2、y2)に線を引く*/   } } で、これを実行するための以下のようなクラス public class TestDraw{ <ここに入力> } という問題なのですが2つまでは絞れたのですが、 (1) public static void main(String args[]){   Draw d = new Draw().line(10,10,20,30); } ↑× (2) public static void main(String args[]){   Draw.line(10,10,20,30); } ↑○ (2)はlineメソッドがstaticメソッドだからオブジェクト生成しなくても良い、ということなんですが (1)も正解のような気がするのですが・・・ 解説によると「lineはvoidなのでnew Draw().line(10,10,20,30);とすれば正解、とあります。 どうもいまいち理解できません。 クラスメソッドはオブジェクト生成しなくとも良い→オブジェクト生成できない ということなのでしょうか? それからちなみに、public classって2つ記述できないんではありませんでしたか?

    • ベストアンサー
    • Java
  • vectorに格納されたオブジェクトの廃棄

    次のようなテストプログラムを作ってみました。 OSはVineです。 #include <iostream> #include <string> #include <vector> using namespace std; class Neko{ string name; public: Neko(){} Neko(string n):name(n){} void SetName(string n){name=n;} void Naku() const; }; void Neko::Naku() const{ cout << "名前は" << name << endl; } int main(){ int i; int num; string temp; vector <Neko> x; for(i=0;i<num;i++){ Neko *y=new Neko; x.push_back(*y); } for(i=0;i<num;i++){ cout << "名前を入力" << endl; cin >> temp; x[i].SetName(temp); } for(i=0;i<num;i++)x[i].Naku(); delete [] x;・・・※ } 廃棄(※のところ)するとき、これでは コンパイルエラーになってしまいます。 for文で回しても同じです。 どのように書けばよいのでしょうか? vectorにはポインタではなくオブジェクトが 入っていることに注意してください。

  • メンバ関数の引数としてオブジェクトの配列をとれる?

    VC++6.0 on W2Kを使っている初心者です。 表題のとおりですが、具体的なプログラムは下のようです。 また、*部分に相当するところもエラーになるのですが、 どのように変えればよいのでしょうか? なお、プログラムの内容そのものには意味はなく 単に動作確認のためのサンプルです。 実行すると、 「How many cats do you create?」 と聞かれるので、数字を入力すると、 Nekoオブジェクトが生成され、i番目の猫にはiという名が付けられます。 そして、「何匹目を鳴かせますか?」と聞かれるので、 数字を入力すると、 「My name is i-th cat.」 と答えられ、さらに、Inuが、 「i-th cat is tasty.」 と答える、という内容になっています。 #include <iostream> #include <string> using namespace std; class Neko { int name; public: Neko(){} Neko(int n):name(n){} void setname(int n){name=n;} int getname(){return name;} void naku(int n) const; }; void Neko::naku(int i) const { cout <<"My name is "<<getname()<<"th cat."<<endl;・・・* } class Inu { public: Inu(){} void naku(int i) const; }; void Inu::naku(int i)const{ cout <<i<<"th cat is tasty."<<endl; } int main() { int i; int num; int temp; Neko *x; Inu y; cout <<"How many cats do you create?"<<endl; cin >>num; x=new Neko[num]; for(i=0;i<num;i++){ x[i].setname(i); } cout <<"何匹目を鳴かせますか?"<<endl; cin >> temp; x[temp].naku(); y.naku(temp); }

  • MySQL GROUP_CONCAT 個数を指定

    DBに以下のようなデータが格納されているとします。 | id | name | | 01 | apple | | 01 | banana | | 02 | onion | | 02 | potato | | 02 | carrot | | 02 | radish | | 03 | beef | | 03 | chicken | | 03 | pork | GROUP_CONCATという関数を使えば、 | id | name | | 01 | apple,banana | | 02 | onion,potato,carrot,radish | | 03 | beef,chicken,pork | と、まとめられることは分かっているのですが、 データ個数を指定または最大値に合わせることは可能でしょうか。 実現したい例を以下に記載します。 | id | name | | 01 | apple,banana,NULL,NULL, | | 02 | onion,potato,carrot,radish | | 03 | beef,chicken,pork,NULL | ※「id:02」の最大値「4データ」に合わせるまたは「4」を指定する GROUP_CONCATの引数にはこのような機能はないように見受けられました。 他の手法でも構わないのですがこのような内容を実現できる方法がありましたら ご教授頂ければ幸いです。 どうぞよろしくお願いします。

    • ベストアンサー
    • MySQL
  • 「オブジェクト志向」の考えかたで質問します。

    「オブジェクト志向」の考えかたで質問します。 いろいろと調べると、 ・繼承 ・カプセル化 ・ポリモーフィズム を総称したのが、「オブジェクト」志向と理解しています。 このとき、 たとえば、 指定するクラスの生徒の情報をとりだすようなソースをつくりたい。 仮に、以下をかんがえてみました。 DB処理は、省いてます。 //実行DAOクラス public class StudentDAO extends StudentDBAccessor{ //指定するクラスに属する生徒をとりだす public List getStudentList(int classNumber){ return super.getStudentList(); } //sql文生成 protected String createSqlSelectStudentList(){ StringBuffer sb = new StringBuffer(); return sb.toString(); } //キーワードを設定 public void setDataSqlStudentList(){ } } public abstract StudentDBAccessor extends DBConnector{ protected List getStudentList(){   //DBそうさ } protected abstract String createSqlStudentList(); protected void setDataSqlStudentList(int classNumber); } //DB接続クラス public class DBConnector{   //省略 } //Beanクラス public class StudentFormBean{ private int studentNumber; private String studentName; public void setStudentNumber(int number){ this.studentNumber = number; } public int getStudentNumber(){ return studentNumber; } } よろしくおねがいします。

    • ベストアンサー
    • Java
  • 共分散行列の固有値・固有ベクトルの行列

    以下のようなデータを用いて、共分散行列を生成するとします。 (各No.にはそれぞれx1~x5の5つのデータ) x1 x2 x3 x4 x5 No.1 [2 4 5 2 1] No.2 [3 10 8 7 9] No.3 [11 3 2 1 6] すると、共分散行列は3×3の正方行列になり、その固有値も3つ求まりますよね。 しかし、固有ベクトルに関してはデータがx1,x2,..,x5と5次元で考えているので、 ひとつの固有値に対して5つの成分を持つ固有ベクトルが求まりますよね。 よって、共分散行列の固有値行列は必ず正方行列になりますが、固有ベクトルの 行列は上の例の場合なら5×3行列(列は対応する固有値の数、行はベクトルの成分の数)となり、 必ずしも正方行列にはなりませんよね?そのあたりを教えて頂きたいと思います。 よろしくお願いします。

  • MySQL関数max()を条件にSELECTできませんか?

    MySQL5.0を使っています。 次のようなテーブル(items)があるとします。 name(varchar)|number(int) --------------------------- itemA | 5 itemB | 2 itemC | 3 ここからnumberの最大値を持つnameを抽出したいのです。 SELECT max(number) FROM items とすると当然「5」が返ってきますが、このmax(number)を条件にしてitemを抽出することはできないのでしょうか? よろしくお願い申し上げます。

    • ベストアンサー
    • MySQL
  • サーバ上でActiveXコントロールのオブジェクトを生成し、VBScr

    サーバ上でActiveXコントロールのオブジェクトを生成し、VBScriptからメソッド呼 び出しを行うため、下記のようなプログラムを作成しました。 [test.asp] <html xmlns="http://www.w3.org/1999/xhtml" > <head> <meta http-equiv="Content-Type" content="text/html; charset=x-sjis"/> <meta name="GENERATOR" content="Microsoft Visual Studio 6.0"/> </head> <body> <OBJECT id=Test1 style="LEFT: 0px; VISIBILITY: hidden; TOP: 0px" codeBase=Test.ocx#version=4,0,0,0 type=application/x-oleobject classid=clsid:XXXX runat="server"> </OBJECT> <script language=vbscript runat="server"> Response.Write(Request.Form(input1)) Test1.TestCall(Request.Form(input1)) </script> <script language=vbscript> Sub test1() Document.Testform.submit() End Sub </script> <form name="Testform" action="test.asp"method="POST"> <input style="width: 143px; height: 75px" type="button" name="button1" onclick="test1"/> <input type="hidden" name="input1" value=" "/> <!--ここにユーザ入力値を入れ る--> </form> </body> </html> Test.ocxは公開メソッドとして、ユーザ入力値を引数に持つ"TestCall"を持っていま す。 サーバ側でregsvr32 Test.ocxでレジストリ登録して、そのクラスIDを<OBJECT>タグ で指定しています。 これをクライアントから http://servername/test.asp で開くと、そのまま応答がなくなります。 VBScriptでTest.ocxのメソッドを使用している部分を削除すれば、普通にレスポンス が帰ってきます。 (Response.Write(Request.Form(input1))の結果が正しく表示されている) input1にはユーザ入力値を入れる処理をVBScriptで実装していますが、上記では省略 しています。 何か設定等足りないところがあるのでしょうか? Test.ocxのインスタンス生成に失敗しているような感じがします。 インスタンスはこのページがロードされたときにサーバ側で生成されるものと理解し ていますが、正しいでしょうか? なお、これと同じことをクライアントサイドで行った場合、正常にTest.ocxのメソッ ドをコールできています。 (<object>タグと<script>タグでrunat="server"を削除。) やりたいことは、ユーザーが入力したフォームデータをsubmit()して、サーバ上で ActiveXオブジェクトを生成して、VBScriptからActiveXの公開メソッドを呼び出し、 その中からさらにサーバ上の別プログラムを呼び出し、処理結果を受けてVBScriptへ 処理を戻し、結果をASPで処理してクライアントに返したいのです。 普通のWebアプリケーションとほぼ同じだと思いますが、ActiveXコントロールから別 のプログラム(レガシーアプリ)へはPostMessageで要求を投げているので、結果が 自身にPostされるまでSleepしてからVBScriptに処理を戻すという形にしようとして います。 サーバ環境はWindows Server 2003 + IIS6.0、クライアントはWindows XP Professional SP3 + IE6.0です。 リモートデバッグの仕方が分からず苦労しています。

  • オブジェクトクラスとオーバースライド

    Objectクラスを継承させてオーバースライドさせるプログラムを下記に作成したのですがSandaiクラスのオブジェクトstudent[1]の.student[1].inputNumber("09H999");が「シンボルが見つかりません」とエラーが表示されます。これはどこが足りないのですか?ご連絡をお願いします。 結果   student[0]: 身長: 180.2 cm, 体重: 70.3kg   student[0] はclass Personです   student[1]: 学籍番号:09H999, 身長: 168.3 cm, 体重: 55.2kg   student[1] はclass Sandaiです class Person { private double height, weight; public void inputData(double ht, double wt) { height = ht; weight = wt; } public void showData() { System.out.println("身長: " + height + "cm, 体重:"+ weight + "kg"); } } class Sandai extends Person { private String number; public void inputNumber(String num) { number=num; } public void showData() { System.out.print("学籍番号:"+number+", "); super.showData(); } } class K13_2 { public static void main(String args[]) { Person student[] = new Person[2]; student[0] = new Person(); student[0].inputData(180.2, 70.3); student[1] = new Sandai(); student[1].inputData(168.3, 55.2); student[1].inputNumber("09H999"); for(int i=0; i<student.length; i++){ System.out.print("student["+(i)+"]:"); student[i].showData(); Class c1 = student[i].getClass(); System.out.println("student["+(i)+"]は"+c1+"です。"); } } }

    • ベストアンサー
    • Java
  • プログラミングでの画像の生成について・・・・・・・・

    任意の画像をfと呼び,座標(x,y)における画像fの輝度値を(R(x,y),G(x,y),B(x,y))と呼ぶことにします。 以下の処理を行うプログラムを作成してください。 1,画像fの明るさがm分の1になった画像h1(x,y)=(R(x,y)/m,G(x,y)/m,B(x,y)/m)を生成する。 ここで,mは0<m<10の範囲にある任意の整数である. 2,画像fから法256の画像h2(x,y)=((n×R(x,y))mod(256),(n×G(x,y))mod(256),(n×B(x,y))mod(256))を生成する。 ここで,nは任意の正の整数である. *printfとscanfを使用するためにインクルードする*/ #include<stdio.h> /*ビットマップ画像を扱うためのヘッダ*/ #include<Dll_BMP_C.h> //画像ファイル名最大長(バイト) #define NAME_SIZE 101 int main(void) { int j,k; /* nWidth:画像の幅、nHeight:画像の高さ、nVal:輝度値*/ int nWidth,nHeight; /*pcFileName:画像ファイル名を保存する配列*/ char pcFileName[NAME_SIZE]; /*pBmpOrig:読み込んだ画像へのポインタ pBmpCopy:複製した画像へのポインタ*/ DllBmp*pBmpOrig,*pBmpCopy; /*読み込む画像のファイル名を指定する*/ printf(“読み込む画像”); scanf(“%s”,pcFileName); /*画像を読み込みメモリに保存する 読み込みに失敗したら実行を中止する*/ pBmpOrig=DllBmpReadImage(pcFileName); if(pBmpOrig==NULL) { printf(“画像の読み込みに失敗! 実行を中止します\n”); exit(1); } /*読み込んだ画像のヘッダ情報を表示する*/ DllBmpShowHeader(pBmpOrig); /*読み込んだ画像の大きさを得る*/ nWidth=DllBmpGetWidth(pBmpOrig); nHeight= DllBmpGetHeight (pBmpOrig); /* 画像を生成する */ for(j = 0; j < nHeight; j++) for(k = 0; k < nWidth; k++) { DllBmpSetPixelValueR(pBmpOrig, j, k, 255); DllBmpSetPixelValueG(pBmpOrig, j, k, 255); DllBmpSetPixelValueB(pBmpOrig, j, k, 255); } /*保存する画像のファイル名を指定する*/ printf(“保存する画像”); scanf(“%s”,pcFileName); /*画像を保存する 保存に失敗したら実行を中止する*/ if(!DllBmpWriteImage(pcFileName,pBmpOrig)); { printf(“画像の保存に失敗! 実行に中止します”); exit(1); } /*画像をメモリから消去する*/ DllBmpDleteImage(pBmpOrig); return 0; } 剰余は%演算子を使って求めることができると思うのですが・・・。。 処理内容を選択できて、mとnの値を指定できるように作りたいのですが・・・・・ 何かアドバイス的なものをすみませんがよろしくお願いします。

このQ&Aのポイント
  • 実家近くに出張の場合、出発と帰りは私用と合わせて良いか質問です。
  • 宮城に実家のある人が普段東京勤務で、来月の火曜日に宮城に出張に行くことになりました。
  • 出張の新幹線予約は出発を出張の前の週の木曜の夜、帰りを水曜の夜としましたが、これはNGなのでしょうか。
回答を見る