刚开始使用C ++并尝试转换我最近编写的简单Java程序。
与C ++中的Java ArrayList等效的首选含义是什么?
Answers:
使用标准库中的std::vector
类。
std::list
,尽管那样您会失去可索引性(no operator[]
),因此它实际上不是数组。list
具有自己的特质,vector
通常是更好的选择。在标准C ++容器中,您将不得不折衷一种方式。看一下deque
,这可能为您提供更好的性能。vector
vs(deque
vs )vs(vs )比较容易,list
因为它们在代码中基本上可以互换-只需对容器使用typedef即可typedef vector<MyObj> MyList
。
ArrayList
您可能会从名称中猜出来的@interstar,也未实现为链接列表。您可能会想到LinkedList
。同样,即使您有相当高的对象添加和从列表中删除对象的周转率,它vector
仍然可能比list
只要您最初为其分配了足够的空间而无需重新分配(即,给它分配它应该需要的最大空间)。
这里有几个额外的要点vector
。
与Java不同ArrayList
,Array
在Java中,您不需要做任何特殊的事情即可将其vector
视为数组-C ++中的基础存储可保证是连续的且可高效索引。
不像ArrayList
,avector
可以有效地保存基本类型,而无需将其封装为完整的对象。
从中删除项目时vector
,请注意,必须向下移动已删除项目上方的项目以保留连续的存储空间。对于大型容器,这可能会变得昂贵。
确保将复杂对象存储在中,以vector
确保其复制构造函数和赋值运算符有效。在幕后,C ++ STL在容器内务处理过程中使用它们。
有关reserve()
提前存储的建议(即在向量构造或初始化时),以最大程度地减少以后从Java扩展到C ++的扩展中的内存重新分配。