size是当前元素个数,capacity是已分配内存可容纳的最大元素数;2. 添加删除元素改变size,capacity仅在扩容时增加且不因pop_back减少;3. capacity通常大于等于size,扩容有性能开销。

std::vector 的 size 和 capacity 是两个不同的概念,理解它们的区别对高效使用 vector 至关重要。
size:当前元素个数
size 表示 vector 当前存储的有效元素数量。它反映的是你可以通过下标或迭代器访问的实际数据量。
调用 vec.size() 返回的就是这个值。当你添加或删除元素时,size 会动态变化。
初始化空 vector,size 为 0 push_back 添加一个元素,size 加 1 pop_back 删除一个元素,size 减 1
capacity:已分配内存能容纳的最多元素数
capacity 指的是 vector 在不重新分配内存的前提下,最多能容纳多少元素。它代表的是底层内存空间的容量,而不是当前使用量。
立即学习“C++免费学习笔记(深入)”;
调用 vec.capacity() 可查看当前容量。capacity 一般大于或等于 size。
vector 会在空间不足时自动扩容(通常翻倍) 扩容意味着重新分配内存、拷贝旧数据,有一定开销 capacity 不会因 pop_back 而减少
实际例子说明差异
考虑以下代码:
std::vector vec;
std::cout // 可能输出:size: 0, capacity: 0
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
std::cout // 可能输出:size: 3, capacity: 4 或 8(依赖实现)
vec.reserve(10);
std::cout // 输出:size: 3, capacity: 10
可以看到,即使只存了 3 个元素,capacity 可能已经更大;reserve 显式增加 capacity,但不影响 size。
如何合理管理容量
避免频繁扩容带来的性能损耗,可以提前规划容量。
如果知道大致元素数量,使用 reserve(n) 预留空间 不需要的多余容量可用 shrink_to_fit() 尝试释放(C++11起) 注意:capacity 不保证精确,标准库可能额外预留空间
基本上就这些。size 是“用了多少”,capacity 是“总共能用多少而不换地方”。掌握这两个概念,能写出更高效的 vector 操作代码。
以上就是C++中std::vector的capacity和size有什么区别_C++容器容量管理与size/capacity解析的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1484523.html
微信扫一扫
支付宝扫一扫