C++中的模板類vector

初步認識

模板類vector是一種動態數組,可以在運行程序時設置vector對象的長度,可以動態地進行刪除、添加等操作,可以像訪問數組一樣用[]來訪問某一個元素。在使用vector時,需要包含頭文件<vector>

定義模板類vector
如果要定義一個vector並命名爲N,其中每個元素的類型都是int,可以這樣寫:

vector<int> N;

添加元素
可以使用push_back()方法’向vctor末尾添加元素:

    for (int i = 0; i < 5; i++)
    {
        N.push_back(2*i);
    }

元素輸出
可以使用同數組一樣的方法輸出vector:

for (int i = 0; i < N.size(); i++)
    {
        cout << "the "<<i<<"th number = " << N[i] << endl;
    }

獲取vector大小

cout << "size of N = " << N.size() << endl;

清空vector

N1.clear();
cout << "size of N1 = " << N1.size()<<endl;

vector中的迭代器使用

迭代器的作用和指針很像,它使得我們對vector的操作更加靈活。

定義一個迭代器
如果想定一個迭代器並指向上面定義的vector的起始位置,可以這麼寫:

    vector<int>::iterator pd;
    pd = N.begin();
    //auto pd = N.begin(); //C++11自動推斷類型

值得一提的是,c++11中可以直接使用auto來推斷定義的類型,使定義迭代器更加方便。另外,.begin()成員函數返回第一個元素的位置,相應的,.end()返回結尾後一位的位置。這兩個函數在結合迭代器使用非常頻繁。

使用迭代器遍歷vector

    auto pd = N.begin();
    int j = 0;
    for (pd = N.begin(); pd != N.end(); pd++)
    {
        cout << "the " << j << "th number = " << *pd << endl;
        j++;
    }

需要注意的是,.end()返回的是結尾後一位的位置。

刪除vector中指定位置或區域元素

    N.erase(N.begin()); //刪除指定位置元素
    N.erase(N.begin(), N.begin() + 2); //刪除指定區間元素:N.begin(),N.begin()+1
    N.pop_back(); //刪除最後一個位置元素

vector中插入元素

    N.insert(N.begin() + 1, 10); //插入單個元素
    N.insert(N.begin() + 2, {20, 30}); //插入多個元素

    //插入另一個vector中的某一區域元素
    vector<int> M;
    M.push_back(40);
    M.push_back(50);
    M.push_back(60);
    N.insert(N.begin()+4, M.begin(), M.end());

完整示例代碼

/* main.cpp
描述:C++中vector的基本操作
日期:2017年11月21日
*/
#include <iostream>
#include <vector>
using namespace std;

int main()
{
    /*vector基本操作*/
    cout << "**************************" << endl;
    //定義、添加元素、輸出
    vector<int> N;
    for (int i = 0; i < 5; i++)
    {
        N.push_back(2*i);
    }

    for (int i = 0; i < N.size(); i++)
    {
        cout << "the "<<i<<"th number = " << N[i] << endl;
    }
    cout << "size of N = " << N.size() << endl;

    //清空
    cout << endl;
    vector<int> N1 = N;
    cout << "size of N1 = " << N1.size()<<endl;
    N1.clear();
    cout << "size of N1 = " << N1.size()<<endl;


    /*vector中的迭代器*/
    cout << "**************************" << endl;
    //定義迭代器
    vector<int>::iterator pd;
    pd = N.begin();
    //auto pd = N.begin(); //C++11自動推斷類型

    //與指針用法類似
    for (int i = 0; i < N.size(); i++)
    {
        cout << "the " << i << "th number = " << *(pd + i) << endl;
    }
    //利用迭代器遍歷vector
    cout << "**************************" << endl;
    int j = 0;
    for (pd = N.begin(); pd != N.end(); pd++)
    {
        cout << "the " << j << "th number = " << *pd << endl;
        j++;
    }

    //刪除vector中指定位置或區域元素
    cout << "**************************" << endl;
    N.erase(N.begin());
    N.erase(N.begin(), N.begin() + 2); //N.begin(),N.begin()+1
    N.pop_back(); //刪除最後一個位置元素
    j = 0;
    for (pd = N.begin(); pd != N.end(); pd++)
    {
        cout << "the " << j << "th number = " << *pd <<endl;
        j++;
    }

    //vector中插入元素
    cout << "**************************" << endl;
    N.insert(N.begin() + 1, 10); //插入單個元素
    N.insert(N.begin() + 2, {20, 30}); //插入多個元素
    j = 0;
    for (pd = N.begin(); pd != N.end(); pd++)
    {
        cout << "the " << j << "th number = " << *pd << endl;
        j++;
    }

    //插入另一個vector中的某一區域元素
    cout << "**************************" << endl;
    vector<int> M;
    M.push_back(40);
    M.push_back(50);
    M.push_back(60);
    N.insert(N.begin()+4, M.begin(), M.end());
    j = 0;
    for (pd = N.begin(); pd != N.end(); pd++)
    {
        cout << "the " << j << "th number = " << *pd << endl;
        j++;
    }


    cin.get();
    return 0;
}

輸出結果


vector_example_result

發佈了56 篇原創文章 · 獲贊 214 · 訪問量 36萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章