- ベストアンサー
配列のベクトル化
配列のベクトルを作成することはできるのでしょうか? できるとしたら、どのように宣言すればよいのでしょうか? 教えてください。お願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
> 一次元配列のベクトル 各要素が固定長配列の、任意要素数のベクトルを定義したい、 ということでしょうか??? その前提で回答すると、C++なら、 #include <vector> #include <boost/array.hpp> std::vector< boost::array<int,3> > v; という感じで、配列長が一定の場合は対応できます。 std::vector< int[3] > はたしか無理だったような。 また、要素ごとに長さの異なる固定長配列を持つベクトル、というのは難しいと思います。 C++0xでは可変長テンプレートを定義できるのでそのあ足りでがんばって自作すれば可能かもしれません。 他の回答者の方々と同様、あまり質問の内容を理解できなかったので、まったく検討違いの回答をしているかもしれませんが。
その他の回答 (4)
- titokani
- ベストアンサー率19% (341/1726)
とりあえず、何次元のベクトルが欲しいのでしょうか?
お礼
(固定長1次元)×(可変長1次元)でした。
- Tacosan
- ベストアンサー率23% (3656/15482)
そもそも, あなたのいう「配列のベクトル」が通じないんですよ. つまり, あなたが > int hoge[5] = {1, 2, 3, 4, 5}; > int fuga[4] = {5, 4, 3, 2}; > int piyo[3] = {2, 3, 4}; > の3つの配列を一つのベクトルにまとめる という操作の結果としてどういうものを欲しているのか, 誰にも理解できないんです.
お礼
すみません。。 vector<int[]> iv; iv[0] = hoge; iv[1] = fuga; iv[2] = piyo; みたいな(上のような文法が正しいのかはわかりませんが)一次元固定長配列を要素とするベクトルが欲しかったのです。
- BellBell
- ベストアンサー率54% (327/598)
#1の方同様、意味が判らない事を言っている。自分自身しか判らない、勝手な用語(造語)を使っているのではないか、と思った。 一応検索してみると、以下のようなものがみつかった。 http://ja.wikipedia.org/wiki/%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E5%8C%96 質問者様がこの意味で言っているのだとすれば、どちらにせよ使い方としては間違いだろう。 Wikipediaによれば ベクトル命令化 - コンパイル時にループをベクトル演算命令に変換すること。 という事なので、配列がベクトル化されるわけではなく、ループがベクトル化されるようだ。 いわゆる、コンパイラによる最適化処理の一つとして、コンパイラによって実装されているのだろう(必ずしも実装されているとは限らないとして)。 ※コンパイラのクセを読んで、最適化が効率良く行われるようにプログラムを組むという手法はあるが、質問文からはそれを意味しているとは思えない。 当初、造語を使っているのではないか、と思った際には、二次元配列の事を言っているのではないかと思った。 もしそうなら、以下のページが役に立ちそうだ。 http://www.geocities.jp/KY_webid/c/025.html 上記のどちらでもなければ、ベクトル化が何を意味しているか、説明がなければ誰にも答えられないのではないか、という気がする。
補足
>BellBell様 ご回答ありがとうございます。 ベクトル化にそんな意味があったとは知りませんでした…… 曖昧な言葉を使って申し訳有りませんでした。 知りたかったのは一次元配列のベクトルを作成出来るか、ということです。 たとえば、 int hoge[5] = {1, 2, 3, 4, 5}; int fuga[4] = {5, 4, 3, 2}; int piyo[3] = {2, 3, 4}; の3つの配列を一つのベクトルにまとめることはできるのか、ということです。 どうぞご教授よろしくお願いします。
- BLK314
- ベストアンサー率55% (84/152)
ちょっと質問の意味が理解しかねるので 外してる可能性があると思いますが・・・・ 普通にdouble配列じゃダメですか? double vector[] ={1.0, 2.0, 3.0} で順にx,y,z成分ではお気に召さないのでしょうか? x,y,zを明示したいのであれば配列じゃなくて構造体で表現するとか struct tagVector { double x; double y; double z; } とか・・・ そうじゃなくて、数学のようにベクトル同志の演算をサポートしたい。 例えば vect a, b, c; c = a + b; をやりたいのであれば、 C++言語でクラスにし、演算子を提供することで実現可能です。 ま、そんなことするよりも C++の行列ライブラリ探した方が早い気がしますが・・・ 外していたら、申し訳ないです!
お礼
>BLK314様 ご回答ありがとうございます。 質問が曖昧で申し訳有りませんでした。 具体的には、固定長の一次元配列のベクトルが作成可能かと言うことでした。 ただ、必要な要素数が少ないので、構造体で足りそうです。 どうもありがとうございました。
お礼
ご回答ありがとうございます。 仰る通りです。固定長の時は対応できるのですね。 どうもありがとうございました。