アプリ版:「スタンプのみでお礼する」機能のリリースについて

C++のstd::vectorが格納する要素として配列を指定することはできますか

vectorを使って2次元配列を表現したいときは,たとえば

std::vecor<std::vector<int>> v;

とすれば2次元配列が表現できますよね.

2次元配列の列方向の要素数が2で固定されていて,行方向の要素数が不確定のデータを扱いたいので,2次元配列を格納するvectorで扱えればなと思いました.
(2個で1組のデータがたくさんあるということなので,vectorの2次元配列ではありません)

std::vector<int[2]> v;

int a[2];
a[1] = 1;
a[0] = 2;
v.push_back(a);

という書き方ではコンパイルできなかったのですが,vectorに配列要素を格納させることはできないのでしょうか.
あるいは,もし可能ならどのように書けばよいのでしょうか.

結局は1組のデータセットを構造体化してそれをvectorにプッシュするやり方に落ち着いたのですが,疑問に思ったままモヤモヤしているので質問させて頂きます.

「vector 配列」などのキーワードで検索してみましたが,vectorの動的配列としての紹介記事が多くヒットしてしまい,自分ではうまく情報を発見することはできませんでした.
よろしくお願いします.

A 回答 (5件)

コンテナに巣の配列を要素として入れることはできません.



C++11 (以降) なら std::array を使えばいい.

C++98 なら
・あきらめる
・Boost の boost::array を使う
・C++11 の std::array 相当のものを自作する
のいずれか, かな.
    • good
    • 1
この回答へのお礼

やっぱり無理なんですね
回答ありがとうございました

お礼日時:2014/12/30 18:23

「配列って結局先頭ポインタなので」という表現は乱暴すぎるし余計に誤解させるだけの可能性が高いので賛同できないなぁ>#3. あと,

コンテナに素のポインタを入れるとかえって管理が面倒になるので正直いってお勧めしない.
    • good
    • 1

> 2個で1組のデータがたくさんある



だったら vector<pair<int,int>> が楽なんじゃ?
    • good
    • 0
この回答へのお礼

pairというものを初めて知りました。
今回はこのpairのようなものを自作して解決していたという感じですね。
回答ありがとうございました。

お礼日時:2014/12/30 18:42

配列って結局先頭ポインタなので、


std::vector<int*> v;
で、できませんか?
要素数の指定はできませんが。

ちなみにためしてはいません。
    • good
    • 0
この回答へのお礼

この発想はありました。
しかし、静的配列のポインタをプッシュしても同じアドレスを突っ込むだけですし、new[]した配列を入れてもvectorがデストラクトされる前にdelete[]しなければならないので管理が大変になるかと思うのでやめました。
ちなみに、静的配列にこだわっていたのは、sizeofで要素数が分かるためです。要素数も一元的に管理したいなら、#1の方が言うようにarray相当のものを自作するのがよさそうですね。
回答ありがとうございました。

お礼日時:2014/12/30 18:32

おっと, 変換を間違えた


(誤) 巣の配列
(正) 素の配列
ということで.
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A