-4

私はこのようにリストを持っています: Lists in C++

list<int> p[15];
list<int> copy_of_p[15];

C# のリスト

list<int>[15] p;
list<int>[15] copy_of_p;

このコードを使用して、C#で10000コピーを作成しようとしました

for (int counter = 0; counter < 15; counter++)
{
    copy_of_p[counter] = p[counter].toList();
}

約10ミリ秒かかりました

次に、このコードを使用してC ++で同じことを行いました

for (int counter = 0; counter < 15; counter++)
{
    copy_of_p[counter] = p[counter];
}

約1200ミリ秒かかりました

これは、少なくとも C# と同じ速さでリストをコピーする方法が C++ にあるはずであることを意味します。これを投げる方法を教えてください。

PS:やってみた

copy(p.begin(), p.end(), copy_of_p[counter]); 

しかし、ビルドエラーが発生しました

4

2 に答える 2

7

stl-list<> は C# List<> と同じではないことに注意してください。stl-list は二重にリンクされたリストですが、C# List<> は連続したメモリ ブロックにデータを格納します。したがって、stl-list<> コピー操作ははるかに高速です。

C# List<> は stl-vector<> と同等です

stl-list は C# LinkedList<> と同等です

于 2012-08-26T12:50:32.800 に答える
1

AC# List は実際には連結リストではありません。std::listリンクされたリストです。したがって、2 つの非常に異なる操作を比較しています。第 2 に、C++ コードはデストラクタを呼び出し、ユーザーがメモリを再び利用できるようにしますが、おもちゃの C# プログラムはメモリ管理を実行したり、リソースを解放したりしません。たとえば、代わりに がlist<file>ある場合、C++ プログラムはすべてのファイルを閉じますが、C# プログラムは閉じません。

于 2012-08-26T12:56:49.013 に答える