C++ vector中capacity()和size() 的区别

1 capacity()和size() 介绍

size是指容器当前拥有元素的个数,
capacity是指容器在必须分配新的存储空间之前可以存放的元素总数。

  • vector<int> ivect,ivect.reserve(10),ivect.size()=0,ivect.capacity()=10
    • 当向ivect中插入元素时,只要没有超过10个,那么capacity就不变,而size为你插入的元素的个数。
    • 插入第10个数据时,capacity=size=10,
    • 插入第11个数据时,容器重新分配存储空间ivect.capacity()=20,而ivect.size()=11,
    • 容器重新分配空间的话是现有空间的2倍进行分配,以保证vector的效率。
int main()
{
    
    
    std::vector<int> v1;
    v1.reserve(10);//容器预留 len 个元素长度
    cout << "v1初始 size 和 capacity大小:\n " << "\tv1_size : "<<v1.size() << "\t v1_capacity: " << v1.capacity() <<endl << endl;

    // 添加元素
    cout << "v1c中插入元素后 size 和 capacity大小: " << v1.size() << endl << endl;
    for (int i = 0; i < 13; i++)
    {
    
    
        v1.push_back(i);
        cout << "\tv1_size: " << v1.size() << "\tv1_capacity: " << v1.capacity() << endl;
    }

    return 0;
}

在这里插入图片描述

从上面结果来看,
插入第11个数据时,容器重新分配存储空间ivect.size()=11,
ivect.capacity()=15并非上面所说ivect.capacity()=20

2 vector满了之后,capacity()会自动了扩充为原来的2倍 ?


为了验证函数那个扩充2倍的说法,又找了其他资料


有一种的说法:vector满了之后,会自动了扩充为原来的2倍

vector未雨绸缪机制,满了之后,会自动了扩充为原来的2倍

(提高效率,避免频繁”配置新空间-数据移动-释放旧空间”)

在这里插入图片描述

作者在qt上运行的,我在VS上运行,中止“vector迭代器不兼容”

int main() {
    
    

    vector<int> v;//最初容器没有元素,容量为空
    cout << "容量" << v.capacity() << endl;

    vector<int>::iterator it ;
    int i = 0;
    int count = 0;

    for ( i = 0; i < 1000; i++) {
    
    
        v.push_back(i);//插入第一个元素,开辟1空间;插入第二个元素,开辟2空间;插入第三个元素,开辟4空间。。。每次二倍
        if (it != v.begin()) {
    
     //如果不相等,说明又开辟了新空间,v.begin指向新空间的开头;
            count++;
            cout <<"开辟空间容量: " << v.capacity() << endl;
            it = v.begin();//it记录当前空间的开头
       }
    }
    return 0;
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_51233386/article/details/134401764
今日推荐