我很好奇最常见的 C++ 等价于 .NET 的 List<>?有很多库,我不确定哪一个具有最好的性能特征。
这是演示 List<> 的 .NET 代码:
List<double> x = new List<double> {1};
x.Add(2);
Console.WriteLine("{0},{1}",x[0], x[1]);
我很好奇最常见的 C++ 等价于 .NET 的 List<>?有很多库,我不确定哪一个具有最好的性能特征。
这是演示 List<> 的 .NET 代码:
List<double> x = new List<double> {1};
x.Add(2);
Console.WriteLine("{0},{1}",x[0], x[1]);
除非您有其他选择的理由,否则您应该默认采用的标准容器是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 的这篇论文。
确切的等价物是 std::vector<>。完全相同的性能特征,只是用于调整底层数组大小的指数退避增长算法略有不同。常见的 std::vector<> 实现倾向于将数组增长 x1.5,.NET 集合增长 x2。
请注意,它不是std::list<>,.NET 中的等效项是 LinkedList<>。最好避免,它的缓存位置很差。
你可以使用vector
如下:
#include <vector>
using namespace std;
vector<double> v;
v.push_back(12);