• 締切済み

配列のサイズを決めないプログラム

プログラムの作成時に配列のサイズを決めないでプログラムの実行時に決めるという場合があると思います。 1.可変サイズとして配列の宣言 2.プログラム開始後、何らかの情報でサイズを決定する 3.確保された配列にデータを読み込ませたりして使用する ここで質問ですが、データを読み込ませて配列のサイズが決まる場合、上記の方法では不成立のように思います。2と3が逆だからです。処理するデータに応じて配列のサイズを変更する方法を教えて頂きたいのですが。そのような処理が可能になるとプログラムがデータの量と無関係(もちろん限度あり)となり汎用化されると思うのですが。どのようにするのでしょうか。基本はfortran95ですが、Cでの処理でも参考になるかと思います。

みんなの回答

  • unokwave
  • ベストアンサー率58% (966/1654)
回答No.3

2の「何らかの情報」を「データをバイトなど、構造の最小単位で次々と読み込んで、サイズ解析を予め行う」 という方法を採っている事もあります。 ランダムアクセスが可能ならシークポイントを変更し、シーケンシャルなら必要箇所以外を読み飛ばす事でできます。 処理速度よりも、リスト構造の構造情報自体も塵も積もればで馬鹿にならない時に採られる方法です。 読み込み処理ルーチンの引数に、解析動作なのか本体読み込み動作なのかを示すフラグを設ければ、最小の手間で動作を変えられます。

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.1

「2.」で完全にサイズを決定するんでなくて 2. 読み込むデータがあるなら配列のサイズを増やす。読み込むデータがないのなら終了。 3. 増やしたサイズ分読み込む 4. 「2.」に戻る とすればよろしいかと。

skmsk1941093
質問者

お礼

回答ありがとうございます。以下のような感じでしょうか。 1.仮に読んで見る。 2.読み込めるからデータがある。 3.だったら配列を増やす。 4.1で仮に読み込んだデータがあるのでそれを増やした配列の最後に入れる 私は読み込むループの内部で配列のサイズを変更できると思っていなかったのですが、できそうですね。ありがとうございます。