gpt4 book ai didi

c++ - push_back 实现内部

转载 作者:行者123 更新时间:2023-11-30 02:40:59 25 4
gpt4 key购买 nike

在 std::vectors push_back 实现中,当 size()==capacity() 时,它分配两倍以上的位置并复制 old 的元素,我想问一下,最有效的复制方式?

最佳答案

这在标准中并没有真正指定,而是留给实现。因此,不同的 C++ 库版本会以不同的方式执行此操作。但是,vectorallocator 必须用于任何分配和取消分配(因此没有使用 realloc())。

标准确实指定的是,如果对象可以移动(而不是复制),那么它们应该被移动(C++11 起)。通常,将分配一个新的原始内存块,通常是前一个大小的两倍,然后将元素从前一个移动(或复制并销毁)到旧的。对于一般情况,此移动/复制必须一个接一个地完成(否则,如果不了解相应移动/复制构造函数的内部结构,则无法保证移动/复制的完整性)。当然,对于 pod(=普通旧数据)类型,通过 std::memcpy() 进行优化是可能的(并且很可能已实现)。

您可以尝试查看您的 C++ 库实现,但请注意,代码对于那些不熟悉元模板编程的人来说可能非常不透明:由于各种优化(针对 pod、可移动类型等),代码很复杂。 ).

关于c++ - <vector> push_back 实现内部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28538414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com