みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

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

投稿日時 - 2008-03-25 13:45:26

QNo.3893223

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

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

投稿日時 - 2008-03-25 22:13:00

ANo.3

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

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

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

投稿日時 - 2008-03-25 15:18:36

ANo.2

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

投稿日時 - 2008-03-25 14:42:37

お礼

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

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

投稿日時 - 2008-03-25 15:05:06

ANo.1

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

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

とか?

投稿日時 - 2008-03-25 13:53:15

お礼

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

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

投稿日時 - 2008-03-25 15:00:10

あなたにオススメの質問