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;
}





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