刚开始使用C ++并尝试转换我最近编写的简单Java程序。
与C ++中的Java ArrayList等效的首选含义是什么?
Answers:
使用标准库中的std::vector类。
std::list,尽管那样您会失去可索引性(no operator[]),因此它实际上不是数组。list具有自己的特质,vector通常是更好的选择。在标准C ++容器中,您将不得不折衷一种方式。看一下deque,这可能为您提供更好的性能。vectorvs(dequevs )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 ++的扩展中的内存重新分配。