什么是Java的ArrayList的C++版本

int*_*tar 70 c++ java arraylist

刚回到使用C++并试图转换我最近写的一个简单的Java程序.

什么是C++中Java ArrayList的首选等价物?

SLa*_*aks 79

使用标准库中的std::vector.

  • @interstar - 绝对正确.如果你真的想要链接列表语义,那么使用`std :: list`,虽然你失去了可索引性(没有`operator []`),所以它不是一个真正的数组.`list`有自己的特性,因此`vector`通常是更好的选择.在标准C++容器中,您将不得不以某种方式妥协.看看`deque`,可能会为你提供更好的性能.它(相对)容易测量`vector` vs`deque` vs`list`,因为它们在代码中基本上可以互换 - 只需使用typedef作为容器,例如`typedef vector <MyObj> MyList`. (4认同)
  • 嗯...从另一个答案来看,听起来像矢量没有实现为链表?我对吗?我正在使用此列表作为一个集合,它将添加和删除对象的相当高的周转率.这个阵列实际上是最好的实现吗?或者是否有链接列表版本? (2认同)
  • @interstar,`ArrayList`,正如你可能从名称中猜到的那样,也没有实现为链表.你可能会想到`LinkedList`.此外,即使您从列表中添加和删除对象的转换率相当高,"vector"可能仍然比`list`更快,只要您最初为它分配足够的空间,它不需要重新分配(即,给它应有的最大空间). (2认同)

Ste*_*end 51

这里还有一些额外的要点vector.

不像ArrayListArray在Java中,你不需要做什么特别的治疗vector作为数组- C++中的底层存储是保证连续,高效可转位.

与之不同ArrayList,a vector可以有效地保存原始类型,而无需封装作为完整的对象.

从a中删除项目时vector,请注意必须向下移动已删除项目上方的项目以保留连续存储.对于大型容器来说这可能会变得昂贵

确保将复杂对象存储在vector其复制构造函数和赋值运算符是否有效.在封面下,C++ STL在容器内务管理期间使用这些.

有关reserve()前期存储(即矢量构建或初始化时间)的建议,以便在以后的扩展中最小化内存重新分配,从Java到C++.

  • 到目前为止,更好的答案应该是被接受的答案. (4认同)