zoukankan      html  css  js  c++  java
  • STL 型式(STL idiom) vector

    http://caterpillar.onlyfun.net/Gossip/CppGossip/vector2.html
    vector的STL型式,其實就是以物件導向的方式來操作vector(如果您還沒接觸過物件導向程式設計,這邊介紹的可能稍有難度),以物件的方式來操作vector是比較被鼓勵的方式,以下將介紹幾個vector的基本操作。

    您可以建構一個元素為空的vector物件:
    vector<int> ivector;

    如果打算將元素放入vector中,可以使用push_back(),例如:
    for(int i = 0; i < 5; i++) {
    ivector.push_back(i);
    }

    如果打算將元素循序取出,則可以begin()與end()方法分別傳回起始位置的iterator與結束位置的iterator,例如:
    for(vector<int>::iterator it = ivector.begin();
    it != ivector.end();
    it++) {

    cout << *it << " ";
    }
    cout << endl;

    iterator是標準函式庫定義類別(Class),它是一個指標,指向iterator物件的真正位址,對它進行++的動作,表示移動至 iterator的下一個元素,對它使用*運算子(Dereferences operator),表示提取出iterator目前位址的值,如果iterator走訪至結束位置的iterator的位址,表示元素走訪完畢。

    雖然您可以使用下標運算子[ ]來存取vector的元素,但實際上要知道vector與陣列本質上是不相同的,當您如最上頭那樣宣告一個空的vector物件時,其容量(capacity)為0,長度(size)也為0,所以此時您不能使用ivector[0]來取得第一個元素值,因為實際上ivector中還沒有任何的元素。

    當使用push_back()將元素加入vector時,vector的長度會自動增長,由於每次增長度都要配置記憶體過於沒有效率,所以vector會自動先增加足夠的容量,當元素的長度超過容量時,才會再重新配置新的容量,您可以使用capacity()取得,使用size()取得元素長度,下面這個程式綜合以上的幾個介紹作了示範:


    #include <iostream> 
    #include <vector>
    using namespace std;

    int main() {
    vector<int> ivector;

    for(int i = 0; i < 10; i++) {
    ivector.push_back(i);
    }

    for(vector<int>::iterator it = ivector.begin();
    it != ivector.end();
    it++) {

    cout << *it << " ";
    }
    cout << endl;

    cout << "capacity: " << ivector.capacity() << endl
    << "size: " << ivector.size() << endl;

    return 0;
    }

    結果如下:
    0 1 2 3 4 5 6 7 8 9
    capacity: 16
    size: 10

    如果打算對vector進行排序、尋找、反轉等操作,可以使用標準函式庫中的泛型演算法,要使用泛型演算法必須先含入表頭檔:
    #include <algorithm>

    下面這個程式直接示範了排序、尋找、反轉等操作:


    #include <algorithm>
    #include <iostream>
    #include <vector>
    using namespace std;

    int main() {
    int iarr[] = {30, 12, 55, 31, 98, 11, 41, 80, 66, 21};
    vector<int> ivector(iarr, iarr + 10);

    // 排序
    sort(ivector.begin(), ivector.end());

    for(vector<int>::iterator it = ivector.begin();
    it != ivector.end();
    it++) {

    cout << *it << " ";
    }
    cout << endl;

    cout << "輸入搜尋值:";
    int search = 0;
    cin >> search;

    vector<int>::iterator it =
    find(ivector.begin(), ivector.end(), search);

    if(it != ivector.end()) {
    cout << "找到搜尋值!" << endl;
    }
    else {
    cout << "找不到搜尋值!" << endl;
    }

    // 反轉
    reverse(ivector.begin(), ivector.end());

    for(vector<int>::iterator it = ivector.begin();
    it != ivector.end();
    it++) {

    cout << *it << " ";
    }
    cout << endl;

    return 0;
    }

    執行結果:
    11 12 21 30 31 41 55 66 80 98
    輸入搜尋值:41
    找到搜尋值!
    98 80 66 55 41 31 30 21 12 11
  • 相关阅读:
    Orcale 之基本术语一
    robots 小记
    划分子网例题详解 转
    jsp中利用response.senddirect(str)重定向,传递参数新思路
    当有多个form表单请求时如何处理?
    Form表单中的action提交路径问题
    用mysql workbench导出mysql数据库关系图
    eclipse中html编辑环境的搭建
    两个jsp文件运行后弹出对话框 下载文件问题
    Eclipse tomcat配置 未在Eclipse中添加.jar包出错
  • 原文地址:https://www.cnblogs.com/nickchan/p/3104416.html
Copyright © 2011-2022 走看看