C++列表的随机访问

4

你是在谈论数组还是链表?请注意,使用链表时无法实现 O(1) 的随机访问。在链表上进行随机访问的最佳方法是 O(n) - In silico
你能更具体地解释一下你所说的“列表”是指什么吗? - cost
1
谁说Python列表就是C++列表? - GManNickG
4个回答

10

在C++中,最接近你所需的可能是一个向量:

std::vector<int> v;
v.push_back(1);
v.push_back(12);
v.push_back(3);
std::cout << v[1] << std::endl; // prints 12

您可以使用提供的迭代器遍历向量。但一旦您修改了向量(插入或删除),它就会变得无效。

而提供的实际List类(即双向链表)不提供这种功能。


是的,在实现方面,C++ 的 vector 最类似于 Python 的 list。 - Johan Kotlinski
这个答案不错,但如果通常使用类似于列表但需要随机访问的话,我实际上会推荐使用std::deque - Evan Teran

3

如果你使用std::list,你必须通过迭代列表来查找特定的元素,因为列表是双向链表,不能使用随机访问运算符访问元素。

这是因为在列表中,快速高效地在任何位置插入或删除元素,所以在修改列表后,最开始的第一个元素可能变成了第三个元素。


1
如果我理解你的问题正确,你正在询问关于数组的问题。
int list[3(size)] = {1,12,3};
cout << list[1];

0
如果你在谈论 C++ STL 列表,那么不,这就是列表的主要问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接