忍者ブログ

カウンター

プロモーション

カレンダー

03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

AntinomyMy の実験室

   私のWEBアプリ実験室です!

ブログ内検索

楽天でお買い物

twitter

最新トラックバック

最新コメント

忍者アナライズ

ウェザーニュース

バーコード

本を買う

アクセス解析

Google+

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。


  • 2024/04/20 03:52

可変長配列とSTLとテンプレート

VisualC++ 調べ物


- 長い前書き-

 今回は簡単に述べると、可変長配列(variable langth array)は色々な言語で簡単に出来るかどうかの話題である。

 私は未だに言語に依存したプログラミングしか出来ない場合が多い。

 それは勿論言語に特化した便利な関数や書式が用意されていて、
言語の違いによる出来る出来ないや、得意不得意も大いに関係しているが、
その違いを埋められる能力が付くほど、多くの言語に精通していないと言う意味です。

 他の言語を用いると同等の機能が用意されていなかったり、同等なのだと
知るまでに時間がかかったりするからだ、そしてそうやって時間がかかるので
出来たか出来ないか?で考えた場合に、ある言語で出来ることを
無理して実現するのが簡単ではない他の言語で作れていない事になる。

 しかし私は他の言語で同じ挙動や同じ内容のプログラミングが出来るのであれば、
とてつもなく自身の能力が伸びたりする事も重々承知なのである。

 プログラミングに対して先に上手に進めない葛藤を持った事がある人には、
どれだけ上手にしたい事に対しての『情報をスムースに入手出来るか?』が精神衛生上
『プログラミングが気持ちよく長続きするか?』に繋がるのだと思う。

 しかしそれは単純に軽く好きであったり、物事に追われていない人の考える事であると思う、
しかしそれとは私は一線を越えていると思う節がある、私は出来ない事を忘れたり
諦めたりするのがとてつもなく上手ではない、きっと出来なくとも永遠に覚えいて、
そのうち出来る様になる方法や考え方を得るまで精神衛生上良くなくともしつこく覚えている人
なのだと思う。

 何よりも私はお師匠様や、知り合いのプログラマーなど、知りたい事に対して尋ねられる
身近な人は存在しない。Web や本 から何かを得るぐらいしか能力が無い場合が多く、
そしてWeb 上で尋ねられる掲示板があったとしても、上手に気兼ねなく尋ねられるかを考えると
尋ねる事に対して多少躊躇するものであり、現状では結局尋ねた事はない。

 私が使った事のある言語で、配列の大きさが後から後からどんどん変わるので、
配列の大きさを変えて使う事をなんの気も使わないで当たり前に使ってきた。

 たとえばVisual Basic 6.0 で書いたプログラミングで、配列の大きさはReDim ステートメント
用いてPreserve のキーワード を指定すれば、配列の中の情報を残したまま、
同次元の配列であれば、配列の大きさを大きくしたり小さくしたり何も考えなくて出来るのである、
これはプログラミング言語において、可変長配列と言われる物だろうが、
これを意識なくプログラミングが出来る言語と、明らかに意識してなんらかの手順を踏んだ上でしか
プログラミングが出来ない言語がある。
 PHP や、Visual Basic 6.0 などは本当に可変長配列は意識しなくとも配列の大きさを
変えられてしまう。

 しかし、早くそしてOSの能力を生かしたアプリケーションソフトウェアを作りたいと思うと
かなり思考する方向が変わってくる。

 入門レベルや多少使ってみた程度のC++ の能力しかない物が
Visual Basic 6.0 の可変長配列 を用いたプログラミング をC++ を用いて
同様の可変長配列プログラミング をしようとすると、きっと私と一緒で何処から手をつけたら
良いか判らないぐらい、どの機能を用いて実現するのか戸惑うのだと思う。

 他にも意識してか可変長配列を用いるプログラミング言語や、意識しなくても良い言語などは
ある様で、分類の意味でジェネリックプログラミング などを調べれば、類似した言語は出てくるが、
私が知りたいのはまずVisual C++ を用いたプログラミングで C++ の機能について知りたいので、
C++ で可変長配列を用いる方法を調べてメモしたいと思う。


メモその1 C(C++)の規格 C99 からは可変長配列が取り入れられている

 とある本を買わずに中身だけ拝見させて頂いた。
後から中古しかなかったですが買いました。
C言語体当たり学習 徹底入門 (標準プログラマーズライブラリ)
新品が欲しかったのですが、もう売ってないみたいなんです^^;

そこにある事には、C99 の規格のC++ であれば、
構造体や共用体でない、staticの宣言がしていない
関数内のみで可変長配列が宣言出来るそうです。

 しかし、C99(ISOの規格で、ISO/IEC 9899:1999(E) Programming Language--C (Second Edition)
は1999年12月頃に出来た規格であり、私の使うVisual C++ 6.0 は
リリースですら1998年であり対応していない。

 また同様に言い換えるならば、このC99 からの可変長配列は下位互換性は無いので
昔のコンパイラでコンパイルエラーになるので、他のコンパイラを使うならば
互換性の問題で悩まされそうだ。

----- 関数の一例 -----
関数名:var_array
関数引数型:int
関数内部可変長配列名:piece
関数内部可変長配列型:int

void var_array(int x){
    int piece(x);
}

----- ----- -----
こんな感じみたいです。

しかしこの可変長配列は、VBみたいに配列を拡張する方へ大きくする場合に
前に持っていた値を保持する、VBで言う所のReDim ステートメント の
Preserve キーワード を指定した場合には、
既存の配列に格納されている値を失うことなく、配列の最後の次元の要素数を変更する
とあるのですが、この機能の様にONやOFFが出来るかもやってみていないので
不明です。




拍手[0回]

PR


  • 2010/03/16 00:09

コメント一覧

  • お名前
  • Email

  • コメント

  • Vodafone絵文字 i-mode絵文字 Ezweb絵文字
  • パスワード
[PR]