如果是这样,为什么需要将容量缩小到零或适合大小?
vector<int> mandy2(5);
vector<int>().swap(mandy2);
printf("mandy2 size: %d\n", mandy2.size());
printf("mandy2 capacity: %d\n", mandy2.capacity());
mandy2.push_back(1);
mandy2.push_back(2);
mandy2.push_back(6);
答案 0 :(得分:2)
std::vector
请求, push_back
就会重新分配。
在推回之前,我将容量缩小到零,然后我推回项目 进入矢量,它会重新分配吗?
是
是重新分配意味着性能下降吗?
从长远来看,没有(因为每次插入需要O(1)
摊销时间)。我不担心它,除非分析显示 是一个问题。
如果是这样,为什么需要将容量缩小到零或适合大小?
我不明白这个问题。
答案 1 :(得分:2)
答案 2 :(得分:1)
在推回之前,我将容量缩小到零,然后我将项目推回向量,它会重新分配吗?
是的,它会。
参考 doccumentation :
void push_back ( const T& x );
在向量的末尾添加一个新元素,在其当前的最后一个元素之后。此新元素的内容初始化为x。
的副本这有效地将向量大小增加1,如果向量大小等于调用之前的向量容量,则会导致内部分配存储的重新分配。重新分配使以前获得的所有迭代器,引用和指针无效。
reallocate
意味着性能下降吗?
Theorotically,是的!
只有在对相同的代码进行概要分析后,才能最终确定对您造成的伤害。
如果是这样,为什么需要将
capacity
缩小为零或适合size
?
如果你知道你不想在向量中添加任何其他元素,那么你只会这样做,这可以确保你的向量不会消耗比实际需要更多的内存。