質問 |
||
| 質問者: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 |
|
| この回答への補足 | この回答に補足をつける(質問者のみ) |
| この回答へのお礼 | こちらの方法で実現できました。 ありがとうございました〜 |