vector的size和capacity改变时空间分配的过程

当增加新元素(s)时,如果超过当时的容量,则容量会扩充至两倍。如果两倍容量仍不足,就扩张至足够大的容量。

以一个例子来说明:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

int main()
{
    int i;
    vector<int> iv(2,9);
    cout<<"size = "<<iv.size()<<endl;
    cout<<"capacity = "<<iv.capacity()<<endl;

    iv.push_back(1);
    cout<<"size = "<<iv.size()<<endl;
    cout<<"capacity = "<<iv.capacity()<<endl;

    iv.push_back(2);
    cout<<"size = "<<iv.size()<<endl;
    cout<<"capacity = "<<iv.capacity()<<endl;

    iv.push_back(3);
    cout<<"size = "<<iv.size()<<endl;
    cout<<"capacity = "<<iv.capacity()<<endl;

    iv.push_back(4);
    cout<<"size = "<<iv.size()<<endl;
    cout<<"capacity = "<<iv.capacity()<<endl;

    for(i = 0;i < iv.size();i++)
        cout<<iv[i]<<" ";
    cout<<endl;

    iv.push_back(5);
    cout<<"size = "<<iv.size()<<endl;
    cout<<"capacity = "<<iv.capacity()<<endl;
    for(i = 0;i < iv.size();i++)
        cout<<iv[i]<<" ";
    cout<<endl;

    iv.pop_back();
    iv.pop_back();
    cout<<"size = "<<iv.size()<<endl;
    cout<<"capacity = "<<iv.capacity()<<endl;

    iv.pop_back();
    cout<<"size = "<<iv.size()<<endl;
    cout<<"capacity = "<<iv.capacity()<<endl;

    vector<int>::iterator ivite = find(iv.begin(),iv.end(),1);
    if(ivite != iv.end())
        iv.erase(ivite);
    cout<<"size = "<<iv.size()<<endl;
    cout<<"capacity = "<<iv.capacity()<<endl;
    for(i = 0;i < iv.size();i++)
        cout<<iv[i]<<" ";
    cout<<endl;

    ivite = find(iv.begin(),iv.end(),2);
    if(ivite != iv.end())
        iv.insert(ivite,3,7);
    cout<<"size = "<<iv.size()<<endl;
    cout<<"capacity = "<<iv.capacity()<<endl;
    for(i = 0;i < iv.size();i++)
        cout<<iv[i]<<" ";
    cout<<endl;

    iv.clear();
    cout<<"size = "<<iv.size()<<endl;
    cout<<"capacity = "<<iv.capacity()<<endl;

    return 0;
}
时间: 2024-11-05 23:12:05

vector的size和capacity改变时空间分配的过程的相关文章

c++11 size 和 capacity 区别

size()  -- 返回目前存在的元素数.即: 元素个数 capacity() -- 返回容器能存储 数据的个数. 即:容器容量 reserve() --设置 capacity 大小 resize()  --设置 size ,重新指定有效元素的个数 ,区别与reserve()指定 容量的大小 看图: 当创建空容器时, 容量(capacity)为 0;当用完时,增加原容量的 1/2 (各编译器 可能存在差异  vs2013是这样的,mingw则 增加原容量 )--适用如 vector这种 元素连

IOS - xib(Interface Builder,view) - can&#39;t change view size(view不能改变大小问题)

很多时候,我们自定义tableview.collectionview的cell,也有时候我们要自定义窗口xib,但创建xib后,其height.width不可修改. 这时问题就来了,怎么才能使我们的自定义xib宽高可修改: 项目中创建xib,单独的view时, 方法: 默认Simulated metric中Size:inferred(推断),则view的height.width不可改变: 修改为Size:Freeform,现在我们的xib view 宽高可修改了. 学习并转载:http://ip

input中的内容改变时触发的事件

onchange事件在内容改变(两次内容有可能相等)且失去焦点时触发: onpropertychange事件是实时触发,每增加或删除一个字符就会触发,通过js改变也会触发该事件,但是该事件是IE专有. oninput事件是IE之外的大多数浏览器支持的事件,在value改变时实时触发,但是通过js改变value时不会触发:基本写原生常用的是oninput. oninput与onpropertychange失效的情况: oninput事件: 1.当脚本中改变value时,不会触发: 2.从浏览器的自

12.checkbox改变时让字改变

checkbox改变时让字改变 public class Setup4Activity extends BaseSetupActivity { private CheckBox cbProtect; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_setup4); cbProtect

textView设置按下和焦点改变时让字体颜色发生变化

在res/color/text_color_selector.xml这个下编写: <?xml version="1.0" encoding="utf-8" ?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:color

linux系统运行级别改变时,系统所做的工作

# 其实计算机的关闭也就是运行级别的切换: # init进程监控运行级别是否改变. # 如果运行级别改变了,init进程就会触发 /etc/rc.d/rc 脚本运行. # rc 脚本作用是: #    1.如果当前计算机运行有,在当前运行级别 #   (correctrunlevel )/etc/rc.d/rc$runlevel.d/目录下以K开头的服务.就关闭. #     2.开启当前运行级别(correct runlevel )/etc/rc.d/rc$runlevel.d/目录下#   

当浏览器窗口大小改变时事件

<script type="text/javascript"> window.onload=function(){ changeDivHeight(); } //当浏览器窗口大小改变时,设置显示内容的高度 window.onresize=function(){ changeDivHeight(); } function changeDivHeight(){ var h = document.documentElement.clientHeight;//获取页面可见高度 do

input提示字在有焦点消失或输入改变时消失

一:获取焦点时 提示字消失 <input type="text" name="textfield" value="这里是提示内容" onclick="if(value==defaultValue){value='';this.style.color='#000'}" onBlur="if(!value){value=defaultValue;this.style.color='#999'}" />

五种情况下会刷新控件状态(刷新所有子FWinControls的显示)——从DFM读取数据时、新增加子控件时、重新创建当前控件的句柄时、设置父控件时、显示状态被改变时

五种情况下会刷新控件状态(刷新控件状态才能刷新所有子FWinControls的显示): 在TWinControls.PaintControls中,对所有FWinControls只是重绘了边框,而没有整个重绘这些FWinControl子控件.那么什么时候才整个重绘全部FWinControls呢?这时候,就不是一个单纯的WM_PAINT来解决控件重绘的问题了,而是这个TWinControl.UpdateShowing函数: procedure TWinControl.UpdateShowing; v