容器(下)

容器(下)

 

(面試題)什麼是迭代器的範圍

       迭代器是STL提供的對一個容器的對象訪問方法,並且定義了容器中對象的範圍。迭代器就如同一個指針,但是,迭代器不僅僅是指針,因此不能認爲迭代器一定具有地址值。

 

       迭代器類似與指針一樣,能夠使用*操作符類獲取數據。還可以使用自增操作符和+、-運算符對迭代器進行操作,用以訪問容器中的對象。迭代器有2個是已經定義好的,一個是begin,另一個是end。可以通過容器的begin()操作和end()操作獲取這兩個位置。其中begin指向容器中的第一個元素,end指向的是容器中的最後一個元素的下一個位置,也就是說end所指向的並不是容器的元素。通常beginend之間的範圍就是迭代器的範圍

#include <iostream>
#include <vector>
using namespacestd;
 
int main(){
      
       vector<int> v;
       v.push_back(2);
       v.push_back(1);
       vector<int>::iterator first = v.begin();
       //vector<int>::iteratorlast = v.end();
       //在使用迭代器之前,不應該存儲操作end()的返回值,因爲如果再保存了end()的返回之後,
       //又對容器的元素進行插入和刪除,所以這樣使用的話,將會導致end()迭代器失效。
       while(first!=v.end())
       {
              inti = *first;
              v.push_back(1);
              first++;
       }
       return0;
}


(面試題)什麼是關聯容器

       關聯容器是能夠通過鍵值(關鍵字)來查找和讀取元素的容器。在STL中有4個 關聯容器,分別是mapsetmultimapmultiset容器

       map的元素是“鍵-值”對的二元組形式即鍵用作元素在map中的索引,而值則表示所存儲和讀取的數據。set僅包含一個鍵,並有效地支持關於某個鍵是否存在的查詢。set和map類型的對象所包含的元素都具有不同的鍵,如果需要一個鍵對應多個實例,則需要使用multimap或multiset類型。這兩種類型允許多個元素擁有相同的鍵。

       set是一個容器,它其中所包含的元素的值是唯一的。集合中的元素按照一定的順序排列,並被作爲集合中的實例。一個集合通過一個鏈表來組織,在插入操作和刪除操作上比vector快,但查找或添加操作末尾的元素時會有些慢。

#include <iostream>
#include <string>
#include <set>
using namespacestd;
 
int main()
{
       set<string>strset;
       set<string>::iterator si;
 
       strset.insert("1");
       strset.insert("2");
       strset.insert("3");
       strset.insert("4");
       strset.insert("5");
       strset.insert("6");
 
       for(si = strset.begin(); si != strset.end();si++)
       {
              cout<< *si << " ";
       }
       cout<< endl;
       return0;
}

set容器和multiset容器的區別:

set<int>strset; //聲明set變量
strset.insert(1); //往set中插入兩條相同的數據,這是不允許的
strset.insert(1);
 
multiset<int>mset;
mset.insert(1); //聲明multiset變量
mset.insert(1); //往multiset中插入兩條相同的數據,這是可以的

 


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