• 締切済み

要素数がプログラム内で変化する配列のクラス間のやりとり

随分初歩的な質問をしているとは思うのですが、解決方法がみつからないので質問をお願いします。 C++で配列をクラスから呼び出すときに、そのクラスの要素数がプログラム内で変化する場合、 どのようにするのが良いのでしょうか? Class class_A { private: プログラム内で要素数が変化する配列 public: get_hairetu(){return 上の配列} } Class class_A::openfile { テキストからデータ読み込み データ数に応じて配列の大きさが変化 } int main(void) { class_A A; 配列=A.get_hairetu(); ↑ここでclass_Aで決定した配列の要素数に応じて配列の要素数を変化させたいです } なるべくリストではなく配列で作成したいのですが、配列を全クラスで共有する方法があればそちらをお願いします。 (class_Aとmainはそれぞれ別のcppファイルに記述しています) vector型で配列を作ることも考えたのですが、VC++ではなぜか使えませんでした。 質問内容が曖昧で申し訳ありませんが、ぜひ回答をお願いします。

みんなの回答

  • stingy
  • ベストアンサー率37% (144/379)
回答No.2

>配列を全クラスで共有する方法 MFC使いならCArray(またはその派生クラス)をグローバル変数にして使用する。 vector型は #include "vector" で使えると思います。 拡張子.hはないので注意してください。 蛇足ですが get_hairetu()の考え方では配列をprivateで宣言する意味がありません。 [配列の数を返す][n番目の値を返す]などのpublic関数を作るべきです。

全文を見る
すると、全ての回答が全文表示されます。
  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

>vector型で配列を作ることも考えたのですが、VC++ではなぜか使えませんでした。 そうです。std::vector を使用するのが普通です。使えないはずはありません。

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

関連するQ&A

  • 配列の要素数

    配列の要素数を求めるプログラムを作りたいのですが

  • 配列の要素に同じ値をもたせないプログラムについて

    現在、JAVAの入門書にてプログラムの勉強中です。 その書籍に掲載のプログラムコードがどうしても意図する結果に なりません。入力間違いなどのミスはないか何回も見直しましたが、 どこも入力間違いは見当たりません。 何が原因か教えて頂けますでしょうか。 実行例がこのようになります。 数字は例なのでこの限りではありません。 要素数 : 7 a[0] = 7 a[1] = 5 a[2] = 1 a[3] = 2 a[4] = 9 a[5] = 6 a[6] = 3 プログラムコードが下記になります。 /*配列の全要素を1から10の乱数で埋め尽くす (すべての要素が重複しないようにする*/ 01: import java.util.Random; 02: import java.util.Scanner; 03: 04: class ArrayRandY { 05: 06: public static void main(String[] args) { 07: Random rand = new Random(); 08: Scanner stdIn = new Scanner(System.in); 09: 10: int n; //要素数 11: do { 12: System.out.print("要素数 : "); 13: n = stdIn.nextInt(); //要素数を読み込む 14: } while (n > 10); 15: int[] a = new int[n]; //配列を生成 16: 17: for (int i = 0; i < n; i++) { 18: int j = 0; 19: do { 20: a[i] = 1 + rand.nextInt(10); 21: for ( ; j < i; j++) 22: if (a[j] == a[i]) break; 23: } while (j < i;); 24: } 25: 26: for (int i = 0; i < n; i++) { 27: System.out.println("a[" + i + "] = " + a[i]); 28: } 29: } 30:} 以上です。 これを javac ArrayRandY.java → java ArrayRandY とやると、重複しない結果のときもありますが 重複する値が出てしまうときもあります。 著者のホームページの正誤表を見たのですが情報がありませんでした。 常にこのプログラムの配列の全要素を重複しないようにするには どうしたらよろしいでしょうか。 よろしくお願いいたします。 ちなみに、プログラムコードですが、入力画面ではインデントを 入力しているのですが確認画面ではなぜかインデントが表現 されてません。 大変見苦しいことお詫び申し上げます。

    • ベストアンサー
    • Java
  • Java:クラスのインスタンスを配列の要素にする?

    問題集で次のプログラムを見掛ました。 A[] array = {new B(), new C()}; クラスA型の配列変数arrayにクラスBとクラスCのインスタンスを要素として代入しています。 このような配列を作成した場合、具体的にどのような使い方があるのでしょうか? 簡単なプログラムを書いて頂けると嬉しいです。 よろしくお願いします。

  • 配列渡し後の要素数を知るには・・?

    main関数で定義した配列を他の関数で扱う場合にどうすればいいのかいまいちわかりません・・。 微妙に独学したのですが sizeofで要素数を調べたいのですがどうすればmain以外の関数内で要素数を調べる事ができるのでしょうか。私の書いたソースはこれです。 void dis(int *b){ int i, nx; nx = sizeof(b) / sizeof(b[0]); for(i=0;i<nx;i++){ printf("%d\n", *(b+i)); } } main(){ int a[5] = { 10, 20, 5, 1, -1 }; dis(a); return(0); } どうすればいいでしょうか・・・。どなたか教えていただければ光栄です。ご指導お願いします!

  • perl 配列の要素数について

    配列の要素数について質問させていただきます。 プログラムの中で、以下のようにファイルの内容を1行ずつ読み込み、配列に入れています。  open (IN, "ファイル名");  @data = <IN>;  close (IN); こういった形で配列に入れていった場合、入れられる最大行数(=最大要素数)はどれくらいになるのでしょうか。 現在100万行のテキストファイルは、問題なく読み込めているようでした。 ご存知の方がおられましたら、ご回答いただければと思います。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • クラス同士を配列化するこはできますか?

    調べてもそれらしきサンプル載っていなかったので質問します。 使用言語はjavaSE6です 例えばこんな感じです class A{ int a=0; } class B{ int b=1; } class C{ int c=2; } class sample{ public static void main(String[] args){ //クラスA、クラスB、クラスCを配列にするやりかたわからないのでここまで } } 宜しくお願いします。

    • ベストアンサー
    • Java
  • 配列の要素でmysqlに問い合わせ

    フォームから送信されたデータを配列として取得し、その配列の1つの要素に対してそれぞれmysqlにselectで問い合わせてageというカラムの値を取得したいと思っています。 配列の要素の数がその都度変わるので、要素が5つある場合には5回selectでデータベースに問い合わせてデータを5つ取得したいのですが、それは可能でしょうか? ためしに下記のようにしてみたのですが、うまく取得できませんでした。 $hairetu = $_POST; for($i=0; $i< count($hairetu) ; $i++){ $sql = "SELECT * FROM member where age = '$hairetu[i]';"; $res = mysql_query($sql, $conn) or die("エラー"); $row = mysql_fetch_array($res, MYSQL_ASSOC); $age = $row["age"]; echo $age; } $ageの値をcount($hairetu)の回数分表示したいのですが、どのように処理していいのか分かりません。 また、根本的におかしな点もあると思いますがよろしくお願いします。

    • ベストアンサー
    • MySQL
  • Cなどで要素の数が固定できない配列はどうやって実現しますか?

    配列について質問します。 BASIC系では配列は動的配列で要素の数が自由に変えられます。 ですが、C等では宣言時に配列の要素の数を決めておかねばならなかったと思います。 もし、C等で要素の数がわからないけど、配列を使いたい場合、どうすればいいのでしょうか? どのように実現するのでしょうか? 配列と同じ使い勝手なら配列でなくともかまいません。 今はVBAでプログラムを組んでいるので、動的配列を使えばすむのですが、いずれ他の言語に移植したいので、できるだけ使わないようにしたいと思っています。 よろしくお願いいたします。

  • 配列の要素の入り方

    こんばんは。 現在C言語のプログラミングを勉強しています。 まだまだ初心者で基礎も十分には理解できていないので、とても基本なのかもしれませんが質問させていただきます… 例えば以下のような、配列に文字を入力するだけのプログラムを作ったとします。 --------------------------------- #include<stdio.h> main(){  int data[10];  printf("input - ");  fgets(data,10,stdin); } --------------------------------- これを実行し、 input - abc のように「abc」と入力すると、配列にはどのように入るのですか?  data[0]=a, data[1]=b, data[2]=c となるまではわかるのですが、data[3]からdata[9]には何が入るのでしょうか。配列のクリアはしていない状態です。 改行とnullが入る、というように聞いたのですが、これらはどのような順(?)で配列に入っているのかがわかりません。 よろしくお願いします。

  • IntArrayクラスのプログラムを組んでいるのですが・・・

    javaプログラミングで以下の内容を満たす、IntArrayクラスを作成しています。 ・インスタンス変数  int型の配列data ・コンストラクタ  (1)int型の配列を受け取り、そのコピーを内部的に保持する  (2)第1引数で指定された要素数を持つ配列を確保し、全ての要素に初期値として第2引数で指定された値をセットする  (3)第1引数で指定された要素数を持つ配列を確保し、全ての要素に初期値としてゼロをセットする ・メソッド  (1)sort   内部的に保持している配列を、引数の値がtrueであれば昇順、falseであれば降順にソートする  (2)length   IntArrayが保持している配列の要素数を取得する  (3)getElement   引数に指定された要素番号の値を取得する  (4)setElement   第1引数に指定された要素番号に第2引数で指定された値を格納する   (5)getArray   IntArrayが保持している配列のコピーを取得する 実際にプログラムを組んでみたのですが、※の部分が冗長だと指摘を受けました。 しかしどのように修正したらよいかわかりません。 どうかアドバイスなどをよろしくお願いいたします。 package java_Lesson; import java.util.Arrays; /** * int型の配列dataの要素を取得、あるいは操作するクラス */ class IntArray { private int[] data; /** * int型の配列を受け取り、そのコピーを内部的に保持する * * @param args コピー元となる配列 */ IntArray(int[] args) { data = (int[])args.clone(); } /** * 第1引数で指定された要素数を持つ配列を確保し、 * 全ての要素に初期値として第2引数で指定された値をセットする * * @param arg1 配列の要素数 * @param arg2 配列の初期値 */ IntArray(int arg1, int arg2) { this(arg1); /* ※ */ for (int index = 0; arg1 > index; index ++) { data[index] = arg2; } } /** * 第1引数で指定された要素数を持つ配列を確保し、 * 全ての要素に初期値としてゼロをセットする * * @param arg 配列の要素数 */ IntArray(int arg) { data = new int[arg]; } /** * 内部的に保持している配列を昇順、あるいは降順にソートする * * @param arg trueであれば昇順、falseであれば降順にソート */ void sort(boolean arg) { Arrays.sort(data); if (arg) { return; } int array = data.length - 1; for (int index = 0; array > index; index ++, array --) { int temp = data[index]; data[index] = data[array]; data[array] = temp; } } /** * IntArrayが保持している配列の要素数を取得する * * @return 配列の要素数 */ int length() { return data.length; } /** * 引数に指定された要素番号の値を取得する * * @param arg 返す要素の要素番号 * * @return 配列dataの要素番号argの値 */ int getElement(int arg) { return data[arg]; } /** * 第1引数に指定された要素番号に第2引数で指定された値を格納する * * @param arg1 値を格納する要素番号 * @param arg2 配列に格納する値 */ void setElement(int arg1, int arg2) { data[arg1] = arg2; } /** * IntArrayが保持している配列のコピーを取得する * * @return 配列dataのコピー */ int[] getArray() { return data.clone(); } }

    • ベストアンサー
    • Java
このQ&Aのポイント
  • iX1600を一時的に使用する場合、S1300からのソフトアップデートはvr5.6ですが、ScanSnap ManagerだけでみるとVr7.1まである可能性があります。
  • iX1600のソフトアップデートは最新版のVr7.1を選択することが推奨されます。
  • iX1600のソフトアップデートについては、製品の公式サイトのダウンロードページから最新版をダウンロードしてインストールすることができます。
回答を見る

専門家に質問してみよう