首页 > 解决方案 > 如果 std::vector 包含的元素大小增加,它是否必须调整大小?

问题描述

如果这是一个太基本的问题,无法在这里提出,我深表歉意;我一直在阅读一些关于 std::vector 的内容,并且我知道当大小达到容量时它必须调整大小。如果它包含的对象很大,这可能是一项昂贵的操作,因为它必须复制每个对象。

我的问题是:std::vector 如何处理它所包含的对象的实际大小增长?假设我初始化了一些

std::vector<Obj> vec(100);

每个 Obj 都被初始化为非常小的东西。但是如果我然后做类似的事情怎么办

vec[14].ENGORGIO()

所以它现在需要更多的内存。由于 std::vector 的元素存储在连续的内存中,这是否意味着它必须调整大小(昂贵!)

为了避免这种事情,我应该将指针存储在向量中而不是对象本身吗?像这样

std::vector< std::unique_ptr<Obj> > vec;

谢谢

标签: c++memoryheap-memorystdvector

解决方案


C++ 中数据类型的大小是在编译时设置的,不能更改。数据类型可能包含对其他对象的引用,并且这些其他对象的大小可能不同,但引用的大小以及数据类型是不变的。

考虑svector中的一个vector。内部vector可能包含 0 个元素或数十亿个元素,并且它始终是相同的大小。外部vector只知道它包含 0 个或多个vectors,而对内部 s 中包含的内容一无所知vector

您不必担心这一点。


推荐阅读