- 締切済み
配列のサイズを決めないプログラム
プログラムの作成時に配列のサイズを決めないでプログラムの実行時に決めるという場合があると思います。 1.可変サイズとして配列の宣言 2.プログラム開始後、何らかの情報でサイズを決定する 3.確保された配列にデータを読み込ませたりして使用する ここで質問ですが、データを読み込ませて配列のサイズが決まる場合、上記の方法では不成立のように思います。2と3が逆だからです。処理するデータに応じて配列のサイズを変更する方法を教えて頂きたいのですが。そのような処理が可能になるとプログラムがデータの量と無関係(もちろん限度あり)となり汎用化されると思うのですが。どのようにするのでしょうか。基本はfortran95ですが、Cでの処理でも参考になるかと思います。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- unokwave
- ベストアンサー率58% (966/1654)
2の「何らかの情報」を「データをバイトなど、構造の最小単位で次々と読み込んで、サイズ解析を予め行う」 という方法を採っている事もあります。 ランダムアクセスが可能ならシークポイントを変更し、シーケンシャルなら必要箇所以外を読み飛ばす事でできます。 処理速度よりも、リスト構造の構造情報自体も塵も積もればで馬鹿にならない時に採られる方法です。 読み込み処理ルーチンの引数に、解析動作なのか本体読み込み動作なのかを示すフラグを設ければ、最小の手間で動作を変えられます。
- TIGANS
- ベストアンサー率35% (245/681)
可変長配列は、リスト構造で保持するのが一般的かと https://qiita.com/ue1221/items/1df930f4cd59ca8fd7e4 https://qiita.com/ue1221/items/16a754c7cc3b6632ea4f 詳しくはここら辺の書籍で勉強 https://www.amazon.co.jp/s/?field-keywords=9784501523800 https://books.google.co.jp/books?id=0wZKsSPY_XIC&pg=PA42&lpg=PA42&dq=%E3%83%87%E3%83%BC%E3%82%BF%E6%A7%8B%E9%80%A0+%E3%83%AA%E3%82%B9%E3%83%88&source=bl&ots=r7vVYgrOAO&sig=ACfU3U1UYlQ7GPggAO_X1yZbI-kAMwWzlQ&hl=ja&sa=X&ved=2ahUKEwiUi-TZie3jAhVCQN4KHZkcCVkQ6AEwT3oECF8QAQ#v=onepage&q=%E3%83%87%E3%83%BC%E3%82%BF%E6%A7%8B%E9%80%A0%20%E3%83%AA%E3%82%B9%E3%83%88&f=false
- wormhole
- ベストアンサー率28% (1626/5665)
「2.」で完全にサイズを決定するんでなくて 2. 読み込むデータがあるなら配列のサイズを増やす。読み込むデータがないのなら終了。 3. 増やしたサイズ分読み込む 4. 「2.」に戻る とすればよろしいかと。
お礼
回答ありがとうございます。以下のような感じでしょうか。 1.仮に読んで見る。 2.読み込めるからデータがある。 3.だったら配列を増やす。 4.1で仮に読み込んだデータがあるのでそれを増やした配列の最後に入れる 私は読み込むループの内部で配列のサイズを変更できると思っていなかったのですが、できそうですね。ありがとうございます。