1. 程式人生 > >C/C++——vector的基本操作總結

C/C++——vector的基本操作總結

標準庫vector型別是C++中使用較多的一種類模板,vector型別相當於一種動態的容器,在vector中主要有一些基本的操作,接下來分別從以下的幾個方面總結:

  • vector物件的定義和初始化
  • vector物件的基本操作,主要包括新增元素,遍歷等

1、vector物件的定義和初始化

在vector中主要有四種定義和初始化的方法:

1.1、定義空的vector

定義的方法為:

vector<T> v;

1.2、定義一個vector的副本

定義的方法為:

vector<T> v1(v);

1.3、定義並初始化

定義的方法為:

vector<T> v2(n, i);

定義了長度為n的vector v2,並且每個元素都是i。

1.4、定義並指定初始長度

定義的方法為:

vector<T> v3(n);

採用的初始化方法為預設初始化。

1.5、例子

對於上述的四種定義方法如下圖所示:

#include <stdio.h>
#include <vector>
using namespace std;

int main(){
    //第一種定義方法
    vector<int> v;
    for (int i = 0; i < 10; i++){
            v.push_back(i);
    }

    //第二種定義方法
    vector<int> v1(v);
    //第三種定義方法
    vector<int> v2(10, 1);
    //第四種定義方法
    vector<int> v3(10);

    printf("first: ");
    for (vector<int>::size_type ix = 0; ix != v.size(); ix ++){
            printf("%d\t", v[ix]);
    }
    printf("\n");
    printf("second: ");
    for (vector<int>::size_type ix1 = 0; ix1 != v1.size(); ix1 ++){
            printf("%d\t", v1[ix1]);
    }
    printf("\n");
    printf("third: ");
    for (vector<int>::size_type ix2 = 0; ix2 != v2.size(); ix2 ++){
            printf("%d\t", v2[ix2]);
    }
    printf("\n");
    printf("forth: ");
    for (vector<int>::size_type ix3 = 0; ix3 != v3.size(); ix3 ++){
            printf("%d\t", v3[ix3]);
    }
    printf("\n");

    return 0;
}

注:上述程式碼是在C中使用vector。

2、vector中的基本操作

在vector中的基本操作包括插入,刪除,遍歷等。

2.1、插入操作

在vector中插入元素包括兩種,一種是在尾部新增元素,使用的函式是push_back()函式,另一種是在指定位置插入元素,使用到的函式是insert()函式。

其中,insert()函式的具體形式為:

insert(p, t)

指的是在迭代器p之前插入值為t的元素。具體應用如下面的例子:

#include <stdio.h>
#include <vector>
using namespace std;

int main(){
    vector<int> v;
    for (int i = 0; i < 10; i++){
            v.push_back(i);
    }

    for (vector<int>::size_type ix = 0; ix != v.size(); ix ++){
            printf("%d\t", v[ix]);
    }
    printf("\n");

    //在開始插入10
    v.insert(v.begin(), 10);
    for (vector<int>::size_type ix = 0; ix != v.size(); ix ++){
            printf("%d\t", v[ix]);
    }
    printf("\n");

    //在10和0之間新增11
    vector<int>::iterator it;
    for (it = v.begin(); it != v.end(); it++){
            if (*it == 0){
                    v.insert(it, 11);
                    break;
            }
    }
    for (vector<int>::size_type ix = 0; ix != v.size(); ix ++){
            printf("%d\t", v[ix]);
    }
    printf("\n");

    return 0;
}

2.2、刪除操作

使用erase()方法刪除指定的元素。

erase(p)

刪除迭代器p所指向的元素。

#include <stdio.h>
#include <vector>
using namespace std;

int main(){
    vector<int> v;
    for (int i = 0; i < 10; i++){
            v.push_back(i);
    }

    for (vector<int>::size_type ix = 0; ix != v.size(); ix ++){
            printf("%d\t", v[ix]);
    }
    printf("\n");

    //在開始插入10,10,10
    v.insert(v.begin(), 3, 10);
    for (vector<int>::size_type ix = 0; ix != v.size(); ix ++){
            printf("%d\t", v[ix]);
    }
    printf("\n");

    //刪除第二個10
    int i = 0;
    vector<int>::iterator it;
    for (it = v.begin(); it != v.end(); it++){
            i++ ;
            if (i == 2){
                    v.erase(it);
                    break;
            }
    }

    for (vector<int>::size_type ix = 0; ix != v.size(); ix ++){
            printf("%d\t", v[ix]);
    }
    printf("\n");


    return 0;
}

除此之外,還有clear()方法,清空vector中的所有元素,pop_back()方法,刪除末尾的元素。

#include <stdio.h>
#include <vector>
using namespace std;

int main(){
    vector<int> v;
    for (int i = 0; i < 10; i++){
            v.push_back(i);
    }

    for (vector<int>::size_type ix = 0; ix != v.size(); ix ++){
            printf("%d\t", v[ix]);
    }
    printf("\n");

    //刪除末尾元素
    v.pop_back();

    for (vector<int>::size_type ix = 0; ix != v.size(); ix ++){
            printf("%d\t", v[ix]);
    }
    printf("\n");


    return 0;
}

2.3、遍歷

遍歷通常有兩種方式:

  • 通過下標
  • 利用迭代器

如下:

#include <stdio.h>
#include <vector>
using namespace std;

int main(){
    vector<int> v;
    for (int i = 0; i < 10; i++){
            v.push_back(i);
    }
    //利用下標      
    for (vector<int>::size_type ix = 0; ix != v.size(); ix ++){
            printf("%d\t", v[ix]);
    }
    printf("\n");

    //利用迭代器
    vector<int>::iterator it;
    for (it = v.begin(); it != v.end(); it ++){
            printf("%d\t", *it);
    }
    printf("\n");


    return 0;
}

2.4、其他

在上面的操作中,還有一些操作,如:

  • size(),返回的是vector的大小