2012-03-14 8 views
2

std :: vectorから配列に変換する方法について質問があります。 私はオブジェクトへのポインタのベクトルを持っています。どのように私はそれをC++のオブジェクトへのポインタの配列に変換できますか?C++でベクトルを配列に変換する

ベクトルは私がここで示唆されているすべてのものを試してみた pin** pins_arr

に変換したい std::vector<pin*> *_PINS

ですが、それは私が理由を推測

を動作しません。なぜそれが機能していないのは、基本型の代わりに型としてオブジェクトへのポインタがあるからです。

お願いします。私は徹夜で立ち往生した。

は、

+3

方法は完全に間違っているを開始する:ちょうどこれを使用と。ポインタ型をテンプレートパラメータとして使用するのと同様に、ベクトルへのポインタの格納はほとんど常に間違っています。 –

+0

もちろん、プログラムからポインタを完全に削除するようにしてください。既存の提案が間違っていたことを教えてください。また、 '_PINS-> data()'が動作しない場合は、同じ事のC++ 03バージョンである '&(* _PINS)[0]'を試してください。 – Potatoswatter

+0

'_PINS'は不正な識別子であることはまだ誰も言われていないようです。アンダースコアや(私の意見では)首都は一般的に避けてください。アンダースコアとそれに続く大文字はシステム用に予約されており、コンパイラが警告メッセージを表示することがあります。 – Potatoswatter

答えて

2

編集をありがとう:あなたは本当にこのような変換を行うことを主張するならば、私はあなたがこの順で何かができるとします

std::vector<PIN *> *_PINS; 

_PINS = new std::vector<PIN *>; 

// make life a little easier: 
std::vector<PIN *> tmp = *_PINS; 

PIN *pins = new PIN *[10]; 

for (int i=0; i<10; i++) 
    pins[i] = tmp[i]; 

PIN **ppins = &pins; 

私はEd.Sかかわらに同意する必要がありますあなたがここでやっていることは、最初にstd::vectorを使用する目的のほとんどを打ち負かし、少しばかげて私を打ち明けます。

+0

こんにちは、私はこれを試して、それは動作しません。それは私にこのエラーを与える*** glibcが検出された***無料():無効なポインタ:0x0000000000000031感謝ジェリー、 –

+1

私は '_PINS-> data()'はC++ 11でもっと慣れていると思います。 – ildjarn

+2

返されるポインタは、 'vector'が変更されない限り有効であることに注意する必要があります。アイテムを追加または削除すると、ポインターを再割り当てして無効にすることがあります。 – Thomas

1

だから、まずオフ;なぜポインタのベクトルを使っているのですか?なぜベクトルへのポインタを格納しているのですか?これは、あなたのためにメモリを管理するベクトルの能力を迂回し、ほぼ間違っています。ベクトルはそれが意図していたことをやります。それはあなたのためにダイナミックな割り当てとクランチを処理します。

ベクトルは、メモリが連続スペースに格納されていることを保証しているため、最初の要素のアドレスをポインタ、つまり配列として使用できます。ベクトルへのポインタを格納すると、再びスコープに基づいて確定的にクリーンアップする能力がなくなります。デストラクタは手動でdeleteを呼び出すまで実行されません。

ここでは基本的にベクトルを配列として使用しています。繰り返しますが、これは間違っています。ベクトルそのものはlightweaghtオブジェクトであり、それを動的に割り当てる十分な理由はありません。 vector&を使用する必要のある関数に渡します。

ただし、さらに重要なのは、あなたはそれを誤解している。

using std::vector; 

//... 

vector<pin> pins; // that's it! really! 
+0

ありがとう、私もこれを試してみます。 –

+0

こんにちはエド、私は本当にできません。私は別のクラス(クラスB)のオブジェクトへのポインタのリストを含む集約(クラスA)を作成したいと思います。クラスAのオブジェクトを破棄すると、クラスBのオブジェクトが破棄されないようにするために、ポインタを使用する必要があります。ただし、必要に応じてBオブジェクトのリストをループする必要があります。私は本当に別の方法を考えることができませんでした。助けてくれませんか? –

+0

@BinhVanPham:うわー、まだ2年以上前から問題に取り組んでいますか?あなたは 'std :: shared_ptr'を利用できます。しかし、あなたの手にデザイン上の問題があるように私には聞こえます。 –

2

機能dataは、()(配列を返すので、_PINS->データ)動作するはずメンバー...あなたはこのベクトルを使用しているに

関連する問題