C ++相当于.NET的List<>?

时间:2013-05-28 11:42:33

标签: .net

我很好奇最常见的C ++相当于.NET的List<>?有许多库,我不确定哪一个具有最佳性能特征。

以下是演示List<>:

的.NET代码
List<double> x = new List<double> {1};
x.Add(2);
Console.WriteLine("{0},{1}",x[0], x[1]);

3 个答案:

答案 0 :(得分:10)

除非您有其他选择的理由,否则默认情况下应采用的标准容器为std::vector(顺便说一句,相当于.NET的List<>容器)。

std::vector在连续的存储区域中分配其元素,这使得操作更快,因为缓存命中率更高。这通常主导线性计算复杂性对操作的影响,例如从容器中间插入和移除:

#include <vector> // <== Necessary for std::vector
#include <iostream> // <== Necessary for overloads of operator << and std::cout

std::vector<int> temp = { 1 };
temp.push_back(42);
std::cout << temp[0] << "," << temp[1];

这是live example

有关为什么std::vector应该是容器的默认选择的更多技术信息,请参阅this paper by Bjarne Stroustrup

答案 1 :(得分:6)

确切的等价物是std :: vector&lt;&gt;。完全相同的性能特征,只有用于调整底层数组大小的指数退避增长算法略有不同。常见的std :: vector&lt;&gt;实现有利于通过x1.5增长数组,.NET集合增长x2。

请注意,它是不是 std :: list&lt;&gt ;,与.NET中的那个相同的是LinkedList&lt;&gt ;.最好避免,缓存局部性很差。

答案 2 :(得分:3)

您可以使用vector,如下所示:

#include <vector>

using namespace std;
vector<double> v;
v.push_back(12);