STL學習-vector

vector 簡介

vector也是容器的一種,裏面能夠存放相同類型的元素,string容器存放的是char類型元素,如果存放其餘類型元素,如:int ,double, 自定義類等類型。code

vector 構造

定義方式以下:ci

void VectDefine() {
    vector<int> vec1;
    vector<int> vec2(5,12);

    for (vector<int>::iterator iter = vec2.begin(); iter != vec2.end(); ++iter) {
        cout << *iter << endl;
    }
    cout << "*****************" << endl;
    for each (int value in vec2)
    {
        cout << value << endl;
    }
}

vector 容量

void VectCapacity() {
    vector<int> vec1;
    cout << vec1.capacity() << endl;// 默認爲0

    vector<int> vec2(5,222);// 初始化爲5個0
    cout << vec2.size() << " " << vec2.capacity() << endl;
    vec2.resize(3);
    cout << vec2.size() << " " << vec2.capacity() << endl;
    //cout << vec2[3];// resize()重置原size大小,被裁切的元素被釋放掉,經過此行代碼訪問會崩潰

    vector<int>::iterator iter = vec2.begin();
    cout << vec2.capacity() << endl;// 當前空間爲5
    cout << "--" << *iter << endl;

    vec2.push_back(12);
    iter = vec2.begin();// 這裏一樣要注意迭代器失效的問題
    cout << "--" << *iter << endl;
    cout << vec2.capacity() << endl;// 新增1個元素,空間爲7,5 + 5 / 2
    vec2.push_back(12);
    vec2.push_back(12);
    vec2.push_back(12);
    cout << vec2.capacity() << endl;//// 新增3個元素,空間爲10,7 + 7 / 2

    // vc6.0是以2倍增長
}

vector 輸出

void VectCout() {
    vector<int> vec1;
    for (int i = 0; i < 10; ++i) {
        vec1.push_back(i);
    }
    for (int i = 0; i < vec1.size(); ++i) {
        cout << vec1[i] << "  " << vec1.at(i) << endl;
    }
// at()會拋出異常,[]下標的方式不會
}

vector 修改

void VectChange() {
    // assign()
    vector<int> vec1;
    vector<int> vec2;
    vector<int> vec3;
    for (int i = 0; i < 10; ++i) {
        vec1.push_back(i);
    }

    vector<int>::iterator iter_start = vec1.begin() + 2;
    vector<int>::iterator iter_end = vec1.end() - 2;
    vec2.assign(iter_start, iter_end);
    for (int i = 0; i < vec2.size(); ++i) {
        cout << vec2.at(i) << endl;// 輸出2 3 4 5 6 7
    }

    vec3.assign(5, 333);
    for (int i = 0; i < vec3.size(); ++i) {
        cout << vec3.at(i) << endl;//輸出5個333
    }

    //clear()/empty()/erase()
    vec1.clear();
    cout << "size:" <<vec1.size() << endl;
    cout << "is empty:" << vec1.empty() << endl;// 輸出is empty:1
    vec2.erase(vec2.begin() + 2);
    for (int i = 0; i < vec2.size(); ++i) {
        cout << vec2.at(i) << endl;// 輸出2 3 5 6 7 
    }
    vec2.erase(vec2.begin() + 2, vec2.end() - 1);
    for (int i = 0; i < vec2.size(); ++i) {
        cout << vec2.at(i) << endl;// 輸出2 3 7 
    }

    //insert
    vec3.insert(vec3.begin() + 1, 444);
    for (int i = 0; i < vec3.size(); ++i) {
        cout << vec3.at(i) << endl;// 輸出333 444 333 333 333 333
    }
    cout << endl;
    vec3.insert(vec3.begin() + 1, 2, 555);
    for (int i = 0; i < vec3.size(); ++i) {
        cout << vec3.at(i) << endl;// 輸出333 555 555 444 333 333 333 333
    }
    cout << endl;
    vec3.insert(vec3.begin() + 1, vec2.begin(), vec2.end());
    for (int i = 0; i < vec3.size(); ++i) {
        cout << vec3.at(i) << endl;// 輸出333 2 3 7 555 555 444 333 333 333 333
    }
}
相關文章
相關標籤/搜索