一個經典的c++容器的解釋!!

一個很經典的C++容器的解釋 轉載

C++容器說實在的怎麼講呢?首先給大家舉個例子,房間這個詞大家不陌生吧,那麼這個房間就類似於一個容器,房間是個對象吧,那麼容器也是一個對象。在房間裏我們可以放很多東西,比如說桌子了,椅子了,電視機等等吧,那麼我們在容器裏面也可以放很多東西,比如說一些對象了,所以在這個容器裏也可以放很多不同的對象,然而容器本身也是一個對象,爲什麼要放入這個容器中呢,你比如說我們把房子的電視機,桌子,椅子等等這些東西不放入房間中,我們直接放入外面的空地中,這時你能想象一下,整個空間顯示的很亂也沒有條理,當我們去找一些東西的時候也是很難找的,並且也花費很長的時間,當有了房間,我們可以把這些東西放入這個房間中,這樣在看佔用的空間時顯得不是很凌亂,所以容器也有這個好處,當然了我這裏只是舉個例子,具體的你還要看C++的具體說明,把這些需要的東西放入這個大的容器中,那麼我們就可以直接對這個容器進行操作,就能找到裏面的東西了,所以說面向對象設計對整個現實世界還是很有意義的,只要理解的透徹,慢慢的C++你就掌握的遊刃有餘,

   剛纔我們談論的是在房間裏放一些其他的對象,比如書桌子,椅子等等吧,當放入的時候我們也是有一定的順序的,也可能房子是2個門的,前面一個門是往裏面放入的東西,當我們取東西的時候可以在另一個門中進行提取,還有的房間就一個門,並且房間不是很大,只能是先放入的東西最後才能取出,還有的房間比較大,可以任意取出房間的東西,不分先後,所以容器也是這樣餓,因此容器有3種類型,vecter ,list ,deque ,然後這些容器都是類模板,怎麼樣定義這樣的容器呢,其實很簡單,我們就照葫蘆畫瓢就可以的,vecter<string> test 這句代碼是我們定義了一個string模板類型的容器 ,test是定義了這個容器的對象,我們說過容器本身也是一個對象,只不過這個對象中存放了很多其他的對象,在這些容器元素中定義了默認的構造函數,用於創建指定類型的空容器的對象,這句話是什麼意思呢,我來說一下,這裏的構造函數是模板類的構造函數,也就是說我們定義一個容器的時候,初始化容器元素string模板中的構造函數,這也就是分配和初始化容器中的元素,比如說我們定義了這樣一句代碼

 const list<string>::size_type list_size=64

list<string> slist(list_size,"asdf");

這是我截取的C++primer 中的代碼,人家說的很詳細了,意思就是說,我定義了一個容器,這個容器的元素是string類型的,而每個元素的值爲“asdf”這也就是不是默認構造函數的初始化

   那麼我們是不是所有的類型都能放入容器呢,這是不行的,原理很簡單,一個大的傢俱肯定不能放入一個很小的房間中,其實這裏容器定義了2個約束條件,這個條件就是限制不能放入容器的條件,

《1》   元素類型必須支持賦值運算

《2》   元素類型對象必須可以複製

具體爲什麼這樣其實大家邏輯一下就能明白的,容器中的元素能不能是容器呢,答案那是可以的,爲什麼呢,因爲容器本身也是對象,並且他滿足放入容器中的條件,定義格式如下

vecte< vecter<string> > test 這裏注意一點就是定義元素爲容器的時候一定要有個空格 。

    上面的只是一個初始概念的東西,到底該怎麼用容器中的元素類型呢,以及怎麼去添加這些元素,刪除這些元素,並且還有查找具體的元素內容,我們都需要學習的。上面的只是一些淺顯易懂的東西,希望大家明白

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