0

私はC++ベクトルを持っています:

        vector<float> floats; 

後で、このベクトルは初期化されます。ベクターコンテナーの内部コンテンツが何であるかはわかりませんが、float の配列がある場所へのポインターを返すことができるかどうかを知りたいです。具体的には、CUDA を使用しており、浮動小数点数の配列へのポインターを渡す必要があります。ベクトルを渡すことはできません。次のようなことができる方法はありますか

float *dapointer = &vector[0];

またはこのようなものですか?私もそれに書くことができるようにしたい、のように

dapointer[some index] = 4;

これはベクトルのポイントに違反していることに気づきましたが、このベクトルはプログラムの他の多くの場所で「ベクトルの目的」に使用されていますが、データにアクセスできるようにするには CUDA も必要です。ベクトルの代わりに配列を使用するように、他のすべてのコードを変更したくありません。

4

4 に答える 4

1
float *dapointer = &floats[0];

すべて良いです。

(おかしなことに、演算子のオーバーロードが C のポインター構文をあいまいにすることに注意してください...)

于 2012-08-04T16:08:24.150 に答える
0
float *dapointer = floats.data();

参照: http://en.cppreference.com/w/cpp/container/vector/data

于 2014-02-05T22:55:06.233 に答える
0

このアプローチは機能するはずですが、注意が必要です。ベクトルを変更すると、ダングリング ポインターが残る場合があります。ベクターに対して実行された非const操作は、イテレーター、ポインター、およびそれが管理するメモリーへの参照を無効にします。これを安全にする方法は、 vector をマークすることconstです。

于 2012-08-04T16:08:00.317 に答える
0

コメントが述べたように、最初の行はこれを行う 1 つの方法です。ただし、ベクトルが少なくともサイズ 1 でない場合、その行は未定義です。

于 2012-08-04T16:08:13.193 に答える