stl中vector的容量变换问题

来源:互联网 发布:空姐外围女 知乎 编辑:程序博客网 时间:2024/05/15 21:27

一道面试题:

对stl中的vector先插入100个元素,再删除这100个元素,该vector的容量如何变化。

汗,当时没答上来,不知道删除元素时会不会回收空间,还是掌握的不扎实啊。


编写如下程序:

int main()
{
    vector<int> vec;
    cout << "Original capacity" << vec.capacity() << endl;

    int i;
    int cap = vec.capacity();
    for (i = 0; i < 100; ++i)
    {
        vec.push_back(i);
        if (vec.capacity() != cap)
        {
            cout << "capacity changed to " << vec.capacity() << "at " << i << endl;
            cap = vec.capacity();
        }
    }

    vector<int>::iterator iter = vec.begin();
    while (iter != vec.end())
    {
        vec.erase(iter);
        iter = vec.begin();
    }

    cout << vec.size() << endl;
    cout << vec.capacity() << endl;

}

输出结果为:

Original capacity0
capacity changed to 1at 0
capacity changed to 2at 1
capacity changed to 4at 2
capacity changed to 8at 4
capacity changed to 16at 8
capacity changed to 32at 16
capacity changed to 64at 32
capacity changed to 128at 64
0
128

从结果可以得出结果:

1. vector初始大小为0, 容量以2倍大小增加

2. 删除元素时,并不回收空间。符合《the c++ standard library》中所说:vector容量不会缩减。


原创粉丝点击