ベクター アドレスを外部 API 呼び出しに渡す前にポインターに渡したいのですが、そうしても安全ですか? 根本的な問題は、ベクトルの要素がメモリ内で連続していることを保証することですか?
std::vector<Type> vT;
Type* p = (Type*)&vT[0];
はい、キャストする必要さえありません。
はい、&v[0]
安全に実行できます。はい、要素はメモリ内で連続しています。ただし、個人的にはv.data()
、アイデアをよりよく伝えるために使用します(結局、内部配列、データを取得する必要があります)。
そうする前に、ベクトルが空でないことを確認してください。
Type *p = ( vT.empty() ? NULL : &vT[0] );
または、Xeoが指摘したように、新しいライブラリ仕様.data()
では、同じことを行うメンバー関数が許可されています(実装では使用できない場合があります)。