ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

質問者:free_Prog 可変長配列を、動的確保した固定長配列へコピーしたい
困り度:
  • すぐに回答を!
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で配列要素を一つ一つ代入しているのですが、
その処理は大量の画像をまとめる処理を行う核で使用しており、
何度も通過する為、できれば直接代入したいのですが、
何かよい手は無いでしょうか?
質問投稿日時:08/03/25 13:45
質問番号:3893223
最新から表示回答順に表示

回答

 

回答者:episteme memcpy(rgbMemBMP, &v_rgbBMP[0], v_rgbBMP.size()*sizeof(RGBQUAD));
種類:回答
どんな人:専門家
自信:自信あり
回答日時:08/03/25 22:13
回答番号:No.4
この回答への補足この回答に補足をつける(質問者のみ)
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

 

回答者:koko_u_ >memcpyが高速だと言う記述をよく目にするのですが
>#1のcopy()と比べて、どうなんでしょうか?

copy() で十分早い。きっとボトルネックはそこではない。

vector<T> を直接 memcpy でコピーするのは実装依存のような気もする。
# 普通は配列として実装されてると思いますけど。
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:08/03/25 15:18
回答番号:No.3
この回答への補足この回答に補足をつける(質問者のみ)
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

 

回答者:Tacosan 普通は #1 の copy だけど, 第2引数を v_rgbBMP から &v_rgbBMP[0] にすれば memcpy でも OK だと思う.
あ, 第3引数も適切に変えてね.
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:08/03/25 14:42
回答番号:No.2
この回答への補足この回答に補足をつける(質問者のみ)
この回答へのお礼memcpyが高速だと言う記述をよく目にするのですが
#1のcopy()と比べて、どうなんでしょうか?

ご存知でしたら参考までにご教授ください。

回答

 

回答者:koko_u_ コピー先がちゃんと確保されているとして、

copy( v_rgbBMP.begin(), v_rgbBMP.end(), rgbMemBMP );

とか?
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:08/03/25 13:53
回答番号:No.1
この回答への補足この回答に補足をつける(質問者のみ)
この回答へのお礼こちらの方法で実現できました。

ありがとうございました〜
最新から表示回答順に表示