0

さまざまなデータ型の引数を にキャストして格納する汎用関数を作成しようとしていvector<char>ます。キャストとは、ビット表現が文字のベクトル内に保持されることを意味します。たとえば、 のintような4 バイトは、 、、および0x19a4f607としてベクトルに格納されます。vc[0] = 0x19vc[1] = 0xa4vc[2] = 0xf6vc[3] = 0x07

ここまで書いてきましたが、セグメンテーション違反が発生します。どうすればこれを修正できますか?

template <class T>
void push_T(vector<char>& vc, T n){
  char* cp = (char*)&n;
  copy(cp, cp+sizeof(T), vc.end());
}
4

2 に答える 2

1

ベクターの最後に挿入できる反復子が必要です。.begin()また、.end()既存の要素を変更することしかできません。試してみてくださいstd::back_inserter(vc)

于 2011-08-03T02:21:08.253 に答える
1

ここで差し迫った問題は、ベクトルのサイズを変更する努力をしていないため、基になる配列の末尾をすぐに書き留めてしまうことです。copy()呼び出しの前にを付けるvc.resize(vc.size() + sizeof(T))か、挿入イテレータを使用std::back_inserterして、コピーで push_back() の動作を強制する必要があります。

さて、そもそも型システムを破壊する正当な理由があると思います....

于 2011-08-03T02:26:29.240 に答える