14

ファイルの内容を char 配列に読み取り、その一部のデータをベクターに読み取りました。char配列の範囲をベクターにコピーするにはどうすればよいですか? vector と char 配列の両方が同じ型 (unsigned char) です。

現在のコードは次のようになります。

int p = 0;

for(...){
    short len = (arr[p+1] << 8) | arr[p+0];
    p+=2;
    ...
    for(...len...){
        vec.push_back(arr[p]);
        p++;
    }
}

でループを削除して、これを改善したいと思いpush_backます。

4

1 に答える 1

26

ベクトルに何かを追加するには、insert()メンバー関数を使用します。

vec.insert(vec.end(), arr, arr+len);

もちろん、assign()おそらくやりたいことに近いもあります。

vec.assign(arr, arr+len);

しかし、あなたの質問を読んで、すぐにベクトルに読み込むことができるのに、その内容をベクトルにコピーするためだけに最初に C 配列に読み込むのはなぜだろうかと思いました。は、そのデータを 1 つの連続したメモリ ブロックに保持するstd::vector<>必要があり、最初の要素のアドレスを取得することでこのブロックにアクセスできます。ベクトルに十分なスペースがあることを確認してください。

std::size_t my_read(char* buffer, std::size_t buffer_size);

vec.resize( appropriate_length );
vec.resize( my_read_func(&vec[0], vec.size()) );

の代わりに&vec[0]、最初の要素のアドレスを取得することもできます&*vec.begin()。ただし、どちらの方法でも、 vector に少なくとも 1 つの要素があることを必ず確認する必要があること注意してください。これをチェックするために 2 つのメソッドのいずれも必要ありません (ただし、デバッグ ビルドの実装ではチェックする必要があります) 。これに失敗すると、どちらも恐ろしい未定義の動作を呼び出します。

于 2011-01-21T11:29:16.653 に答える