0

次のコードに出くわし、頭の中でいくつかの疑問が生じました

std::vector<unsigned char> buf(bytes.constData(), bytes.constData() + bytes.size());

where bytes is QByteArraybytes.constData()returnconst char*

ここでベクターのコンストラクターについて調べましたが、この説明に適していると思われる唯一のコンストラクターは

 vector (InputIterator first, InputIterator last,
                 const allocator_type& alloc = allocator_type());

今私の質問は:

1-ベクターの反復子にポインターを渡すことは可能ですか? なぜbytes.constData() + bytes.size() ですか?たとえば、後でバイトに変更を加えた場合、これはコピーを作成しますか? buf に影響しますか?

4

1 に答える 1

4

「ベクトルの反復子」はここでは誤解されています。問題のベクトル コンストラクターはテンプレートであり、任意の反復子を受け入れます。それが要点です。コンテナは反復可能な範囲から構築できます。

そしてポインタ確かにイテレータです。実際、イテレータの概念全体は、基本的に「ポインタ」の概念を一般化したものです。

ベクター コンストラクターは入力範囲からデータをコピーするため、後で変更してbytesもベクターには影響しません。

于 2013-12-01T10:09:55.633 に答える