STL Vector整理

/**vector容器*/
/*2015.05.25  23:06 第一次整理*/

#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>

using namespace std;

typedef struct Student
{
    int ID;
    string name;
}struA;

int main()
{
//构造
    int nSize = 4;
    int i;
    const int  &t = 9;//整型变量也行
    vector <int> vecIntA(nSize,t);//元素个数为4且每个元素都为9
    vector <struA> vecStruA(nSize);
    vector <int> vecIntB(vecIntA);//vecIntA复制到vecIntB(深复制?)
    vector <int> vecIntC;//创建一个空的vector,加括号与不加括号的区别?
    int arr[] = {1,2,3,4,5};
    vector <int> vecIntD(arr,arr + 4);//这个函数只能用于构造容器,前闭后开,5没有复制进去
    /**for(int i = 0;i < 5;i++)//容器中只有四个元素
        cout << vecIntD[i] << endl;*/
//定位、遍历
    int n = vecIntD.at(2);//返回位置为2的元素的引用
    /**cout << "value:" << n << endl;//输出3*/
    n = vecIntD.front();//返回首元素的引用
    /**cout << "front value: "<< n << endl;//输出1*/
    n = vecIntD.back();//返回尾元素的引用
    /**cout << "back value:" << n << endl;//输出4*/
    /*迭代器的使用同MAP*/
    /*除迭代器外,还可用下标像数组一样遍历*/
///大小
    int Size;
    Size = vecIntA.size();
    /*cout << "size:" << Size <<endl;*/
    Size = vecIntA.capacity();//返回当前vector能容纳的最大元素个数
    /**cout << "capacity:" << Size << endl;//输出4*/
    Size = vecIntA.max_size();//返回最大可允许的元素个数
    /*cout << "max_size:" << Size << endl;*/
//删除,清空,判空
    vector <int>::iterator vecIte;
    for(vecIte = vecIntA.begin();vecIte != vecIntA.end();++vecIte)
    {
        vecIntA.erase(vecIte);//删除迭代器指向元素
    }
    /**cout << vecIntA.size() << endl;//输出2,会剩余两个元素,删除元素后因为会重置begin()位置,所以迭代器位置会变化,所以删不干净*/
    /*for(vecIte = vecIntA.begin();vecIte != vecIntA.end();++vecIte)
    {
        cout << *vecIte << endl;
    }*/

    vecIntA.erase(vecIntA.begin(),vecIntA.begin() + 1);//删除第1个到第2个之间的元素,前闭后开,所以第二个没有删除
    /**for(vecIte = vecIntA.begin();vecIte != vecIntA.end();++vecIte)
    {
        cout << *vecIte << endl;
    }//输出一个9*/

    vecIntA.pop_back();//删除最后一个元素

    if(vecIntA.empty())
    {
        /*cout << "empty!" << endl;*/
    }
    else
    {
        /*cout << "not empty!" << endl;*/
    }
    /**for(vecIte = vecIntB.begin();vecIte != vecIntB.end();++vecIte)
    {
        cout << *vecIte << endl;
    }//有元素输出,所以是深复制*/

    vecIntB.clear();
    vecIntC.clear();
    /**if(vecIntC.empty())
    {
        cout << "empty" << endl;
    }*/
    vecIntD.clear();
    vecStruA.clear();
///插入
    vecIntA.push_back(1);
    vecIntA.push_back(2);
    vecIntA.push_back(3);
    vecIntA.push_back(4);//向尾部插入元素
    /*for(i = 0;i < 4;i++)
    {
        cout << vecIntA.at(i) << endl;
    }*/
    vecIte = vecIntA.begin() + 2;
    const int &m = 6;
    vecIntA.insert(vecIte,m);//向迭代器指向的元素前插入元素m
    /*for(i = 0;i < vecIntA.size();i++)
    {
        cout << vecIntA[i]<< endl;
    }//1,2,6,3,4*/
    n = 3;
    vecIte = vecIntA.begin() + 1;//插入元素后迭代器必须要更新?
    vecIntA.insert(vecIte,n,m);//向迭代器指向的元素前插入n个相同的元素m
    /**for(i = 0;i < vecIntA.size();i++)
    {
        cout << vecIntA[i]<< endl;
    }//1,6,6,6,2,6,3,4*/
    vecIntB.push_back(5);
    vecIntB.push_back(7);
    vector <int>::const_iterator first,last;
    first = vecIntA.begin() + 1;
    last = vecIntA.end();
    vecIntB.insert(vecIntB.begin(),first,last);
    //在迭代器所指向的位置请前插入同类型向量【first,last)之间的数据,前闭后开区间,last元素不插入,注意后面两个形参为常迭代器
    /**for(i = 0;i < vecIntB.size();i++)
    {
        cout << "vecIntB[" << i << "]:" << vecIntB[i] << endl;
    }*/
///其他函数
    vecIntB.assign(first,last);//向量中[first,last)中元素设置成当前向量元素,类似于copy函数
    for(i = 0;i <vecIntB.size();i++)
    {
        cout << "vecIntB[" << i << "]:" << vecIntB[i] << endl;
    }
    vecIntA.assign(4,100);//设置4个元素的值为100
    /**for(i = 0;i <vecIntA.size();i++)
    {
        cout << "vecIntA[" << i << "]:" << vecIntA[i] << endl;
    }//输出100,100,100,100*/
    vecIntB.swap(vecIntA);//交换两个同类型向量的数据
    /**for(i = 0;i <vecIntB.size();i++)
    {
        cout << "vecIntB[" << i << "]:" << vecIntB[i] << endl;
    }*/

    return 0;
}





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章