我很好奇最常见的C ++相当于.NET的List<>?有许多库,我不确定哪一个具有最佳性能特征。
以下是演示List<>:
的.NET代码List<double> x = new List<double> {1};
x.Add(2);
Console.WriteLine("{0},{1}",x[0], x[1]);
答案 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);