生のベクトル データに Char 配列としてアクセスする
関数内で std::vector を char 配列として利用する必要性を考慮してください。 void ポインターを期待します。最初は、通常の char 配列を使用するのが簡単でした。ただし、 std::vector の柔軟性に切り替えると、生データにアクセスする際に課題が生じます。
関数へのベクター ポインターの受け渡し
当面の試みは、 void ポインターが望ましい結果を生成しなかったため、ベクトル &something またはそのイテレーター &something.begin() を関数に渡します。代わりに、&something はデータ自体ではなく std::vector オブジェクトのアドレスを返します。一方、&something.begin() は左辺値として許可されていない反復子のアドレスを提供します。
Addressingインデックス 0 の要素
解決策は、ベクトル内の最初の要素のアドレスを取得することにあります。これは複数の方法で実現できます。 1 つのアプローチは、インデックス 0 の要素のアドレスを与える &something[0] を使用することです。別のオプションは、同じタスクを実行する &something.front() を使用することです。
Data() C 11 の関数
C 11 以降では、std::vector に data() という便利なメンバー関数が導入されました。この関数は、コンテナ内の最初の要素のアドレスを直接返します。その利点は、コンテナーが空の場合でも安全に使用できることです。
結論
void ポインターを受け入れる関数に std::vector データを渡すには、次のようにします。ベクトル内の最初の要素のアドレスを取得するために必要です。これは、C バージョンとコンテナ サイズに応じて、&something[0]、&something.front()、または data() 関数を使用して実行できます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3