草庐IT

java - 在 Java 8 中,为什么 ArrayList 的默认容量现在为零?

我记得在Java8之前,ArrayList的默认容量是10。令人惊讶的是,默认(void)构造函数的注释仍然说:构造一个初始容量为10的空列表。来自ArrayList.java:/***Sharedemptyarrayinstanceusedfordefaultsizedemptyinstances.We*distinguishthisfromEMPTY_ELEMENTDATAtoknowhowmuchtoinflatewhen*firstelementisadded.*/privatestaticfinalObject[]DEFAULTCAPACITY_EMPTY_ELEMENTDA

java - 为什么要以初始容量启动 ArrayList?

ArrayList的常用构造函数是:ArrayListlist=newArrayList();但也有一个重载的构造函数,它的初始容量带有一个参数:ArrayListlist=newArrayList(20);为什么创建一个具有初始容量的ArrayList是有用的,因为我们可以随心所欲地追加它? 最佳答案 如果您事先知道ArrayList的大小,指定初始容量会更有效。如果不这样做,随着列表的增长,内部数组将不得不重复重新分配。最终列表越大,通过避免重新分配节省的时间就越多。也就是说,即使没有预先分配,在ArrayList的后面插入n元

c++ - C++中 vector 的初始容量

什么是capacity()的std::vector哪个是使用默认构造函数创建的?我知道size()为零。我们可以声明一个默认构造的vector不调用堆内存分配吗?这样可以使用单个分配创建具有任意保留的数组,例如std::vectoriv;iv.reserve(2345);.假设由于某种原因,我不想启动size()在2345上。例如,在Linux上(g++4.4.5,内核2.6.32amd64)#include#includeintmain(){usingnamespacestd;cout().capacity()(10).capacity()打印0,10.这是一个规则,还是依赖于STL

c++ - 清除 vector 会影响其容量吗?

我实例化了一个std::vectorfoo(1000)。foo.size()现在是1000,foo.capacity()也是1000。如果我用foo.clear()清除vector,size()现在是0,但capacity()是什么>?标准对此有何规定? 最佳答案 不,它没有。vector的容量永远不会减少。这不是标准规定的,但在VC++和g++的标准库实现中都是如此。为了将容量设置为刚好适合大小,请使用著名的交换技巧vector().swap(foo);在C++11标准中,你可以更明确地做到这一点:foo.shrink_to_fi

c++ - 清除 vector 会影响其容量吗?

我实例化了一个std::vectorfoo(1000)。foo.size()现在是1000,foo.capacity()也是1000。如果我用foo.clear()清除vector,size()现在是0,但capacity()是什么>?标准对此有何规定? 最佳答案 不,它没有。vector的容量永远不会减少。这不是标准规定的,但在VC++和g++的标准库实现中都是如此。为了将容量设置为刚好适合大小,请使用著名的交换技巧vector().swap(foo);在C++11标准中,你可以更明确地做到这一点:foo.shrink_to_fi

c++ - 为什么 std::vector 不保留 "double"它的容量,而调整大小呢?

我刚刚发现std::vector::resize即使调整到比当前大小高出一个元素的大小,它的容量也会“翻倍”:std::vectorv(50);v.resize(51);std::cout该程序在GCC和Clang中输出100,在VisualC++中输出75。但是,当我从resize切换时至reserve:std::vectorv(50);v.reserve(51);std::cout三个编译器的输出都是51。我想知道为什么实现对resize使用不同的扩展策略和reserve.这似乎不一致,我希望这里有同样的行为。我只是为我的问题添加一个链接,其中报告了对性能的影响:WhyareC++

c++ - 为什么 std::vector 不保留 "double"它的容量,而调整大小呢?

我刚刚发现std::vector::resize即使调整到比当前大小高出一个元素的大小,它的容量也会“翻倍”:std::vectorv(50);v.resize(51);std::cout该程序在GCC和Clang中输出100,在VisualC++中输出75。但是,当我从resize切换时至reserve:std::vectorv(50);v.reserve(51);std::cout三个编译器的输出都是51。我想知道为什么实现对resize使用不同的扩展策略和reserve.这似乎不一致,我希望这里有同样的行为。我只是为我的问题添加一个链接,其中报告了对性能的影响:WhyareC++

c++ - 即使根据容量()仍有未使用的空间,std::vector 能否将其数据移动到 emplace_back()处的另一个地址?

是否保证std::vector仅在size()==capacity()并调用push_back()时移动其数据或emplace_back()或者它也可以这样做吗? 最佳答案 规范有点间接。容量指定为:size_typecapacity()constnoexcept;Returns:Thetotalnumberofelementsthatthevectorcanholdwithoutrequiringreallocation.第二部分来自reserve:reserve(size_typen);Remarks:Reallocationi

c++ - 即使根据容量()仍有未使用的空间,std::vector 能否将其数据移动到 emplace_back()处的另一个地址?

是否保证std::vector仅在size()==capacity()并调用push_back()时移动其数据或emplace_back()或者它也可以这样做吗? 最佳答案 规范有点间接。容量指定为:size_typecapacity()constnoexcept;Returns:Thetotalnumberofelementsthatthevectorcanholdwithoutrequiringreallocation.第二部分来自reserve:reserve(size_typen);Remarks:Reallocationi

c++ - vector 的大小与容量?

我对此有点困惑,这两个对我来说看起来都一样。尽管可能会发生容量和大小在不同编译器上可能不同的情况。它可能有何不同。它还说如果我们内存不足,容量就会改变。所有这些我都不清楚。有人可以解释一下吗?(如果可能的话,可以举个例子,或者我可以对任何程序进行任何测试以理解它) 最佳答案 大小不允许在多个编译器之间有所不同。vector的大小是它包含的元素的数量,它直接由您放入vector中的元素数量控制。容量是vector拥有的总空间量。在引擎盖下,vector只使用一个数组。vector的容量是该数组的大小。这总是等于或大于大小。它们之间的区