私の理解ではstd::copy、要素を一度に1つずつコピーします。これは、各要素でコンストラクターをトリガーするために必要なようです。memcpyしかし、そのようなコンストラクター(PODなど)が存在しない場合は、aの方がはるかに効率的だと思います。
それで、STLは、たとえば、vector<int>コピーの特殊化を要求/許可しますmemcpyか?
以下の質問は、私が使用しているコンパイラであるため、GCC/MSVCの両方について回答していただければ幸いです。
- 許可されているが必須ではない場合、上記のコンパイラは実際にそれを実行しますか?
- もしそうなら、これはどのコンテナに対してトリガーされますか?明らかにそれは意味がありません
listが、どうstringですかdeque? - 繰り返しますが、もしそうなら、どのタイプが含まれているのでこれがトリガーされますか?組み込みタイプのみ、または私自身のPODタイプ(例
struct Point {int x, y;})? - そうでない場合は、整数/文字/自分の構造体配列などに使用する
new//deleteポインターの周りに自分のラッパーを使用する方が速いでしょうか?memcpy