-4

我有一个这样的列表: 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 MiliSecs

这意味着在 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是一个链表。因此,您正在比较两个非常不同的操作。其次,C++ 代码将调用析构函数并再次为用户提供内存,而玩具 C# 程序不会执行任何内存管理或释放任何资源。例如,如果您有list<file>,则 C++ 程序将关闭所有文件,而 C# 程序则不会。

于 2012-08-26T12:56:49.013 回答