電子書籍の厳選無料作品が豊富!

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で配列要素を一つ一つ代入しているのですが、
その処理は大量の画像をまとめる処理を行う核で使用しており、
何度も通過する為、できれば直接代入したいのですが、
何かよい手は無いでしょうか?

A 回答 (4件)

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

    • good
    • 0

>memcpyが高速だと言う記述をよく目にするのですが


>#1のcopy()と比べて、どうなんでしょうか?

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

vector<T> を直接 memcpy でコピーするのは実装依存のような気もする。
# 普通は配列として実装されてると思いますけど。
    • good
    • 0

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


あ, 第3引数も適切に変えてね.
    • good
    • 0
この回答へのお礼

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

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

お礼日時:2008/03/25 15:05

コピー先がちゃんと確保されているとして、



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

とか?
    • good
    • 0
この回答へのお礼

こちらの方法で実現できました。

ありがとうございました~

お礼日時:2008/03/25 15:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報