• 締切済み

可変長配列を、動的確保した固定長配列へコピーしたい

javaではcopyintoで固定長配列へ代入できたのですが、 C++でそれに該当するものが見つからず、 newで確保した領域へmemcpyも試してみたのですが、 うまく行きませんでした。 コピー元はvector<RGBQUAD> v_rgbBMP; コピー先はRGBQUAD *rgbMemBMP; 要素数カウンタをnCntとすると rgbMemBMP = new RGBQUAD[nCnt]; memcpy(rgbMemBMP, v_rgbBMP, sizeof(v_rgbBMP)); でエラーが error C2664: 'memcpy' : 2 番目の引数を 'class std::vector<struct tagRGBQUAD,class std::allocator<struct tagRGBQUAD> >' から 'const void *' に変換できません。 ご覧のとおりSTLをよく理解しないまま、 とりあえず通常配列と同様に扱おうとして失敗しました。 現在はforで配列要素を一つ一つ代入しているのですが、 その処理は大量の画像をまとめる処理を行う核で使用しており、 何度も通過する為、できれば直接代入したいのですが、 何かよい手は無いでしょうか?

みんなの回答

回答No.4

memcpy(rgbMemBMP, &v_rgbBMP[0], v_rgbBMP.size()*sizeof(RGBQUAD));

すると、全ての回答が全文表示されます。
  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.3

>memcpyが高速だと言う記述をよく目にするのですが >#1のcopy()と比べて、どうなんでしょうか? copy() で十分早い。きっとボトルネックはそこではない。 vector<T> を直接 memcpy でコピーするのは実装依存のような気もする。 # 普通は配列として実装されてると思いますけど。

すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

普通は #1 の copy だけど, 第2引数を v_rgbBMP から &v_rgbBMP[0] にすれば memcpy でも OK だと思う. あ, 第3引数も適切に変えてね.

free_Prog
質問者

お礼

memcpyが高速だと言う記述をよく目にするのですが #1のcopy()と比べて、どうなんでしょうか? ご存知でしたら参考までにご教授ください。

すると、全ての回答が全文表示されます。
  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

コピー先がちゃんと確保されているとして、 copy( v_rgbBMP.begin(), v_rgbBMP.end(), rgbMemBMP ); とか?

free_Prog
質問者

お礼

こちらの方法で実現できました。 ありがとうございました~

すると、全ての回答が全文表示されます。

関連するQ&A