第九章 9 1節練習 9 2節練習

2021-06-23 07:47:52 字數 865 閱讀 1498

練習9.1:

對於下面的程式任務,vector、deque和list那種容器最為適合?解釋你的選擇理由。如果沒有哪一種容器優於其他同期,請解釋理由。

(a)讀取固定數量的單詞,將他們按字典序插入到容器中。我們將在下一章中看到,關聯容器更適合這個問題。

(b)讀取未知數量的單詞,總是將新單詞插入到末尾。刪除操作在頭部進行。

(c)從乙個檔案讀取未知數量的整數。將這些數排序,然後將它們答應道標準輸出。

解答:這裡涉及到了三個順序容器,以下引用一下primer的原文

【引用】vector  可變大小陣列。支援快速隨機訪問。在尾部之外的位置插入或刪除元素可能很慢。

【引用】deque  雙端佇列。支援快速隨機訪問。在頭尾位置插入/刪除速度很快。

【引用】list  雙向列表。只支援雙向順序訪問。在list中任何位置進行插入/刪除操作速度都很快。

看過各個容器的特點後,就可以進行取捨了。

(a) 數量固定,需要字典序。這裡很有可能在容器中間位置進行多次插入的操作。所以,這裡相對比較合適的就是list。(其實stl中提供了map,應該比list更適合)

(b) 這裡deque比其他兩個容器更加的適合。如果初始容器的量不足,可以在容器後面直接插入,速度也是很快的。

(c) 這裡使用vector就比較方便了,直接在尾部進行插入,直到讀取完畢。然後,進行排序輸出的速度,要比其他兩個容器快。

練習9.2:

定義乙個list物件,其元素型別時int的deque。 

解答:

#include #include // ...

std::list> // c++11

std::list> // c++98

//...

第九章 9 3 2節練習 9 3 3節練習

練習 9.23 在本節第乙個程式 第309頁 中,做c size 為1,則val,val2,val3,和val4的值會是什麼?解答 如果這幾個值都合法存在,val2和val4相等,val指向的是容器內第乙個值,val3指向的是乙個非法的位址,在容器最後乙個元素之外的位址。練習9.24 編寫程式,分別...

第九章 9 2 1節練習

練習 9.3 構成迭代器範圍的迭代器有何限制?解答 這裡首先要清楚什麼是迭代器範圍 引用 乙個迭代器範圍 iterator range 由一對迭代器表示,兩個迭代器分別指向同乙個容器中的元素或者是尾元素之後的位置 one past the last element 再去 限制 引用 對構成範圍迭代器...

第九章 9 2 7節練習

練習 9.15 編寫程式,判定兩個vector是否相等。解答 include include using namespace std int main vectoriv1 iv o.begin iv o.end vectoriv2 iv o.begin 1,iv o.end cout iv o iv...