zoukankan      html  css  js  c++  java
  • c++vector方法第二次试用

    这篇会有点乱,但最后尽量总结好。

    先看下这次的代码

    #include<iostream>
    #include<vector>
    using namespace std; 
    int main(){
    	vector<int> v;
    	v.reserve(10);//保留适当的空间 
     	//加入7个元素 
     	int size;
    	for(int i=0; i<7; i++)
    	    v.push_back(i);
    	try {
    //		第一种没有边界检查不会报错,第二种有边界检查会报错,
    //		这或许是我们使用v.at()的原因吧
    	    int iVal1 = v[7];    // not bounds checked - will not throw
    	    int iVal2 = v.at(6); // bounds checked - will throw if out of range
    		size=v.size();
    		//输出容器里面元素的个数 
    		cout<<"首次添加7个元素后容器里元素个数:"<<size<<endl; 
    		//输出7个元素 
    		cout<<"打印容器里面的7个元素"<<endl; 
    	    for(int i=0;i<7;i++){
    	    	int number=v.at(i);
    	    	cout<<number<<endl;
    		}
    	}
    	catch(const exception& e) {
    	    cout << e.what();
    	}
    	//容器打大小打印一遍 
    	int capa=v.capacity();
    	cout<<"容器大小:"<<capa<<endl;
    	//加入7个元素,现在有14个元素了,开始我们保留的容器空间是10.
    	//现在超过预留空间了,看会不会自动以16的倍数增加 ,猜测都不会,
    	//要不然要v.reserve(10)有什么用呢?
    	//额,,,猜错了,它会增加,而且不是以16的倍数增加,以v.reserve的倍数增加 
    	for(int i=0; i<7; i++)
    	    v.push_back(i);
    	//打印容器大小 
    	capa=v.capacity();
    	cout<<"再添加7个元素后的容器大小:"<<capa<<endl;
    	size=v.size(); 
    	cout<<"再添加7个元素后的容器里面元素的个数:"<<size<<endl;
    	cout<<"打印这14个元素"<<endl; 
    	for(int i=0;i<14;i++){
    	    int number=v.at(i);
    	    cout<<number<<endl;
    	}
    	for(int i=0;i<4;i++){
    		v.pop_back();
    	}
    	size=v.size();
    	cout<<"删除4个元素后的容器里面元素的个数:"<<size<<endl;	
    	return 0;
    } 
    

      结果如下

      一、首先用到了v.reserve()这个方法,它的解释是保留适当空间,上次我没用这个,添加元素时以16的倍数增加,但通过上面的代码,添加元素超过10个后,他自动增加的容量是10,说明每次超过容量,自动增加的容量是10,也就是这里设置的v.reserve(),没使用这个v.reserve()时,系统自动默认是v.reserve(16),以16的倍数增加。

      二、再是找到指定位置的元素用的方法是v.at(),大多时候用这个方法。当你查找的元素位置大于已有元素个数,就是超过了边界值时,使用try-catch配合使用他会有报错,而直接使用

    V[7]。超多边界值时,它的返回值是0,是一个错误的值。  

      三、返回容器中元素的个数的方法是v.size()。

      四、删除元素好像只知道从最后面删除,方法是v.pop_back();删除最后的一个元素,在上面的代码里面也有显示。

      五、 可以看到这个vetor的插入和删除操作分别是v.push_back(i)和v.pop_back(),且都是在末尾进行的,很容易联想到是栈,我反正觉得就是栈的知识了,这样也好记忆这个

    v.push_back(i)和v.pop_back(),push和pop。
         它还有很多方法,今天就先这样吧!

      最后又一个问题,删除元素后,容器的容量会自动变小吗?用v.reserve()和不用时都是一样的情况吗?黑了,看不见了,下次再弄吧。

    Vector函数

    函数

    表述

    c.assign(beg,end)

    c.assign(n,elem)

    [beg; end)区间中的数据赋值给c。

    n个elem的拷贝赋值给c。

    c.at(idx)

    传回索引idx所指的数据,如果idx越界,抛出out_of_range。

    c.back()

    传回最后一个数据,不检查这个数据是否存在。

    c.begin()

    传回迭代器重的可一个数据。

    c.capacity()

    返回容器中数据个数。

    c.clear()

    移除容器中所有数据。

    c.empty()

    判断容器是否为空。

    c.end()

    指向迭代器中的最后一个数据地址。

    c.erase(pos)

    c.erase(beg,end)

    删除pos位置的数据,传回下一个数据的位置。

    删除[beg,end)区间的数据,传回下一个数据的位置。

    c.front()

    传回第一个数据。

    get_allocator

    使用构造函数返回一个拷贝。

    c.insert(pos,elem)

    c.insert(pos,n,elem)

    c.insert(pos,beg,end)

    pos位置插入一个elem拷贝,传回新数据位置。

    pos位置插入n个elem数据。无返回值。

    pos位置插入在[beg,end)区间的数据。无返回值。

    c.max_size()

    返回容器中最大数据的数量。

    c.pop_back()

    删除最后一个数据。

    c.push_back(elem)

    在尾部加入一个数据。

    c.rbegin()

    传回一个逆向队列的第一个数据。

    c.rend()

    传回一个逆向队列的最后一个数据的下一个位置。

    c.resize(num)

    重新指定队列的长度。

    c.reserve()

    保留适当的容量。

    c.size()

    返回容器中实际数据的个数。

    c1.swap(c2)

    swap(c1,c2)

    c1和c2元素互换。

    同上操作。

      
    hello world!
  • 相关阅读:
    JS弹出一个等待对话框,js iframe等待 推荐一下
    netsuite 支持的字段计算函数 oracle 函数
    js 动态创建iframe 后submit提交
    netsuite凭证批量打印中涉及的html分页打印问题,页面的部分打印
    1099MISC是什么
    debit,credit,日记帐就是每天都要登的帐
    netsuite SyncQtyRate
    netsuite与首信易支付(v4.3)接口
    呼叫中心(Call Center)介绍及产品功能列表
    Js MD5加密问题
  • 原文地址:https://www.cnblogs.com/simongreen/p/9373852.html
Copyright © 2011-2022 走看看