gpt4 book ai didi

c++ - STL中的容量和复制

转载 作者:太空宇宙 更新时间:2023-11-04 12:34:29 25 4
gpt4 key购买 nike

<分区>

我想知道当您复制容器(如 vector 或字符串)时,容量会发生什么变化。我运行了以下实验 (Clang 8),但不知道会发生什么。

#include <iostream>
#include <vector>
#include <string>

int main()
{
using namespace std;
vector<int> v;
v.reserve(100);
vector<int> v2 = v;
cout << v2.capacity() << endl;
// 0
string s;
s.reserve(100);
string s2 = s;
cout << s2.capacity() << endl;
// 15
return 0;
}

所以看起来 capacity 没有被复制。一方面这似乎是合理的,因为让拷贝占用比必要更多的内存是一种浪费。但是,另一方面,我可能期望拷贝具有相同的容量。也许我确实想制作几个具有一些预分配容量的 vector 。更一般地说,我通常期望拷贝的行为类似于复制的对象,粗略地说,在 const 时返回相同的结果。方法被调用。我知道没有这样的规则,标准中肯定有很多情况不会发生这种情况。但是无论如何,我想知道是否有关于它的任何规范,如果标准明确表示容器的容量不需要跨拷贝维护。理想情况下,我想获得一些特定的行为,例如假设 clang 所做的是正确的(不维护容量),那么我想理所当然地认为永远不会维护容量(例如,“拷贝的容量是你在 shrink_to_fit 之后得到的”) ,尽管我认为标准会将其留给编译器。

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