c++那些事兒10.0 STL--Vector

知識點綜述:
 vector:動態數組,是序列式容器。
    這里只介紹vector使用,其實現可以參考數據結構,其函數可以查看stl的源碼。
優點:
    1.0相對于數組容量可以根據數組的個數自動調整。(好像不同編譯器的擴容方式不太一樣)
    2.0元素在數組中連續存放,可以根據下標隨機訪問。

既然講到了STL,那就大概介紹一下STL中相關知識點,后面后一一說明的。
 STL中容器可以分為3大類:
     3.0 序列式容器:vector ,deque,list string.
     4.0 關聯容器:set, multiset, map, hash_map, hash_set, 等。
     5.0 容器適配器: stack, queue, bitset等。
所有容器都有的成員方法:
     6.0 構造函數(無參構造,有參構造,復制構造)
     7.0 ==, !=, >,< (相當于按照詞典序比較二個同類型容器大小)
     8.0 int size() 返回容器的大小(元素的數目)
     9.0 bool empty() 判斷容器是否為空(返回true時為空)
     10.0 int max_size() 返回Vector所能容納元素的最大數量.
     11.0 void swap()  交換兩個容器的對象
     12.0 int capacity() 返回容器所能容納的元素數量(在不重新分配內存的情況下)
     13.0 int reserve(int n)  設置容器最小的元素容納數量

所有序列式容器和關聯式容器公有的成員函數。
     14.0 iterator begin() 返回指定容器對象的首元素的迭代器。
     15.0 iterator end() 返回指定容器對象的末元素后面位置的迭代器。
     16.0 iterator erase() 從容器對象中刪除一個或多個元素
     17.0 void clear() 刪除容器對象的所以元素。

僅在序列式容器中公有的常用成員函數。
     18.0 void push_back()在容器對象末尾添加新元素
     19.0 void pop_back() 刪除容器對象末尾的元素
     20.0 void insert() 在容器對象末尾插入一個或多個元素。

注意容器的對象容量和大小是2個不同的概念,通常,容器指的是當前容器可以儲層的元素數量
大小指已經儲層的容量。

部分容器數據結構:


部分容器的數據結構

代碼實現:

#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using  namespace std;
void displayfor(vector<int> vec);
void displayiterator(vector<int> vec);
void displayforeach(vector<int> vec);
int main(){
  //創建vector對象。
    vector<int> vec; //容器為空。

//bool empty() 判斷容器是否為空(返回true時為空)
    cout << "vector 是否為空:" << vec.empty() << endl;

//void push_back()在容器對象末尾添加新元素
    vec.push_back(6); //添加元素
    vec.push_back(8);
    vec.push_back(9);

//int size() 返回容器的大小(元素的數目)
    int size = vec.size();
    cout << "容器的大小:" << size << endl;

    displayfor(vec);
    cout<<endl << "---------------------" << endl;

//void pop_back() 刪除容器對象末尾的元素
    cout << "刪除容器對象末尾的元素." << endl;
    vec.pop_back();
    displayiterator(vec); //迭代器遍歷
    cout << endl << "---------------------" << endl;

//int capacity() 返回容器所能容納的元素數量
    cout << "容器所能容納的元素數量:" << vec.capacity() << endl;

/*void insert() 在容器對象末尾插入一個或多個元素
    iterator insert(iterator loc, const TYPE &val);
    void insert(iterator loc, size_type num, const TYPE &val);
    void insert(iterator loc, input_iterator start, input_iterator end);
    insert() 函數有以下三種用法:
    在指定位置loc前插入值為val的元素, 返回指向這個元素的迭代器,
    在指定位置loc前插入num個值為val的元素
    在指定位置loc前插入區間[start, end)的所有元素 .
*/
    vector<int>::iterator iter1 = vec.end();
    vector<int>::iterator iter2 = vec.begin();
    vec.insert(iter1,22);
    vec.insert(iter2,33);
    cout << "頭部和尾部分部追加一個元素" << endl;
    displayforeach(vec);  //foreach遍歷
    cout << endl << "---------------------" << endl;
    cout << "容器所能容納的元素數量:" << vec.capacity() << endl;



// int max_size() 
    cout  << "容器的最大的容量:" << vec.max_size() << endl;

    vector<int> vec1(6,8);
    cout << "vec1的元素:";
    displayfor(vec1);

// void swap()  交換兩個容器的對象
    cout << endl << "---------------------" << endl;
    vec.swap(vec1);
    cout<<"交換vec和vec1 " << "vec的元素:";
    displayiterator(vec);

//int reserve(int n)  設置容器最小的元素容納數量
    vec.reserve(9);
    cout<<endl << "容器的最大的容量:" << vec.capacity() << endl;
    cout << "容器的大小:" << vec.size() << endl;

//void clear() 刪除容器對象的所有元素。
    vec.clear();
    cout <<" 刪除容器vec對象的所有元素"<< " vec的元素:";
    displayforeach(vec);
    cout << endl << "---------------------" << endl;
    system("pause");
    return 0;
}

//普通for循環
void displayfor(vector<int> vec) {
    for (int i = 0; i < vec.size(); i++)
        cout << vec[i] << " ";
}

//迭代器遍歷
void displayiterator(vector<int> vec){
    /*
    iterator begin() 返回指定容器對象的首元素的迭代器。
    iterator end() 返回指定容器對象的末元素后面位置的迭代器
    */
    vector<int>::iterator ite;
    for (ite = vec.begin(); ite != vec.end(); ite++)
        cout << *ite << " ";
}

//foreach遍歷
void displayforeach(vector<int> vec) {
    for (int i : vec) {
        cout << i << " ";
    }
}

代碼中vector大部分函數都已經實現。



結果:

vector.PNG
其它方法不在說明,可以參考vector函數。

下起了雨,今天早上沒有去跑步。


vector方法參考:

vector函數.PNG

爭取把c++寫的詳細些,C11,STL的東西都很重要。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容