vector的resize()是改变了size的大小,没有改变capacity啊.如何改变capacity呢?
#include <iostream>
#include <vector>
void main( void )
{
std::vector<int> v(200);
std::cout<<v.size()<<','<<v.capacity()<<std::endl;
v.push_back(1);
v.push_back(2);
std::cout<<v.size()<<','<<v.capacity()<<std::endl;
v.empty();
std::cout<<v.size()<<','<<v.capacity()<<std::endl;
v.resize(0);
std::cout<<v.size()<<','<<v.capacity()<<std::endl;
}
运行输出:
200,200
202,300
202,300
0,300
Press any key to continue . . .
问题是,为什么resize命令其实并没有改变capacity? 我如果想改变的话怎么办呢?
相关推荐
Vector用法介绍
这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作。本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用。通过阅读这篇文章读者应该能够有效地使用vector容器,而且应该不会再去使用C类型的动态数组了。
【19】C++实战篇—— vector中 resize()和reserve()详解 与 区别 capacity()和size()
本文介绍了C++ vector容器中size()、empty()、resize()、capacity()和reserve()等常用成员函数的功能与区别。重点分析了resize()和reserve()的实现原理和使用场景:resize()会改变容器大小并初始化新元素,而reserve()仅预留内存空间。通过实验数据展示了vector容量自动扩容机制,发现VS环境下扩容并非固定2倍增长。文章还对比了size()和capacity()的区别,size表示当前元素数量,capacity表示可容纳元素总数。通过多个代
经典C与C++面试题精选
经典C与 C++ 面试题总结,面试集锦,技巧
二维vector,clear()操作请慎重,当心遇到vector subscript out of range问题
二维vector 今天想要用vector实现二维数组的功能,尝试了把二维vector.谁知道刚上手就遇到了雷. 代码的形式大致如下: vector<int>>vv(3); vv.clear(); for (int i = 0; i < 3; i++) vv[i].push_back(0); 因为要重复使用该二维vector,所以进行了清空操作.然而却遇到了问题:vector subscript out of range 原因 后来在单步调试时发现了,clear()会让二维vector的size变成0,之前声明的3个一维数组的结构遭到破坏.(但可以看到它的capacity容量还是之前的值,这个后面会讲到). 执行到for的头部时,自动窗口如下: 如何解决 对上述代码做下改变: vector<int>>vv(3); vv.clear(); vv.resize(3); for (int i = 0; i < 3; i++) vv[i].push_back(0); 相当于把外层的vector的长度又恢复到了之前的值. 同样是执行到for的头部时,自动窗口如下:
C++ vector resize与reserve区别[代码]
本文详细解析了C++中vector容器的resize()和reserve()方法的区别。reserve()主要用于预留空间以避免多次扩容,它只影响容器的容量(capacity)而不改变实际元素数量(size);而resize()则会同时改变容器的大小和容量,并会创建或销毁元素对象。文章通过实例代码展示了两种方法的具体行为差异,包括内存分配机制、元素初始化方式等,并解释了当操作超出当前容量时vector的自动扩容策略。最后总结了两个方法在功能、参数形式和元素访问方面的关键区别,为开发者正确使用这两个方法提供了实用指导。


