-2

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

这是演示 List<> 的 .NET 代码:

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

3 回答 3

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];

这是一个活生生的例子

有关为什么std::vector应该成为容器的默认选择的更多技术信息,请参阅Bjarne Stroustrup 的这篇论文

于 2013-05-28T11:44:32.657 回答
6

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

请注意,它不是std::list<>,.NET 中的等效项是 LinkedList<>。最好避免,它的缓存位置很差。

于 2013-05-28T11:47:08.353 回答
3

你可以使用vector如下:

#include <vector>

using namespace std;
vector<double> v;
v.push_back(12);
于 2013-05-28T11:44:53.013 回答