容器(上)

容器(上)

 

       STL是一個標準的C++庫,容器是其中的一個重要組成部分。在實現容器時主要提供了順序容器和關聯容器。STL爲容器的遍歷提供了迭代器。STL也提供了100多種算法的實現。這些算法包括有排序、遍歷等。

 

(面試題)什麼是容器:

       容器是容納特定類型對象的集合,因此容器裏面的對象必須是同一類型,而且該類型必須是可拷貝構造和可賦值的,所以包括的類型有內置的基本數據類型和帶有公用拷貝構造函數和複製操作符的類。

 

(面試題)有哪幾種順序容器:

       順序容器,指的是將一組具有相同類型T的對象,以嚴格的線性形式組織在一起的容器。包括vector<T>deque<T>list<T>等三種順序容器。

       vector存放的元素是以連續的數組方式存儲的,所以可以通過v[i]的方式訪問vector中的元素,vector的訪問時間是非常小的。而在對特定的值進行訪問時,只能通過遍歷vector的方式進行比較,這樣的操作會導致較大的時間開銷。同時vector把後面的元素複製一遍甚至於重新分配數組。因此,在隨機插入方面vector相對來說性能比較低。


#include <iostream>
#include <vector>
using namespacestd;
 
int main(){
       vector<int>ivec;
       for(size_t i = 0; i < 11; i++)
       {
              ivec.push_back(i);
              cout<< "size="<< ivec.size() << "\t"
                     <<"capacity=" << ivec.capacity() <<endl;
       }
       while(ivec.size() != ivec.capacity())
       {
              ivec.push_back(0);
       }
       cout<< "當前容量已經用完:" << endl;
       ivec.push_back(0);
       //容器已經滿了,即size=capacity,那麼再給vector添加元素時,不得不重新開闢一段空間,並把原來的值複製過去。新開闢的空間大小等於原空間大小的1.5倍。
       cout<< "size= "<< ivec.size() << "\t"
              <<"capacity = " << ivec.capacity() <<endl;
       return0;
}

運行結果:

 

訪問vector中的數據有如下兩種方法:

vector::at();

vector::operator[];

       operator[] 主要是爲了與C語言進行兼容。如果使用該操作可以像C語言數組一樣操作。但at()是首選,因爲at()進行了邊界檢查,如果訪問超過了vector的範圍,將拋出一個異常,而operator[] 則不會。因此operator[] 容易造成一些錯誤,一般不使用它。


#include <iostream>
#include <vector>
using namespacestd;
 
int main(){
      
       vector<int> v;
       v.reserve(10);
       for(int i = 0; i < 7;i++)
       {
              v.push_back(i);
       }
       try
       {
              intival1 = v[7];
              intival2 = v.at(7);
       }
       catch(const exception&e)
       {
              cout<< e.what();
       }
 
       return0;
}

同樣vector提供了erase(), pop_back(), clear() 來刪除數據。當刪除數據的時候,需要知道刪除尾部的數據,或者是刪除所有數據,還是個別的數據

 

       eque容器:是一個雙端隊列,存放的數據不是以連續的形式存放的,其操作接口和vector類似。

 

       list容器:一種鏈表的實現,儲存的元素是通過使用雙向鏈表實現的,雙向鏈表中的每個結點存儲一個元素。優勢在於在list的任意位置進行插入和刪除時,非常的快速,查找和隨機存儲時需要耗費更大的開銷。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章