第九章 9 2 1節練習

2021-06-23 07:47:52 字數 1426 閱讀 2765

練習 9.3:

構成迭代器範圍的迭代器有何限制?

解答:①這裡首先要清楚什麼是迭代器範圍

【引用】乙個迭代器範圍(iterator range)由一對迭代器表示,兩個迭代器分別指向同乙個容器中的元素或者是尾元素之後的位置(one past the last element)。

②再去**限制

【引用】對構成範圍迭代器的要求:

【引用】如果滿足一下條件,兩個迭代器begin和end構成乙個迭代器範圍:

【引用】· 他們指向同一容器中的元素,或者是容器最後乙個元素之後的位置

【引用】· 我們可以通過反覆遞增begin來達到end。換句話說,end不在begin之前。

練習9.4:

編寫函式,接受一對指向vector的迭代器和乙個int值。在兩個迭代器指定的範圍中查詢給定的值,返回乙個布林值來指出是否找到。

解答:其實在algorlthm標準標頭檔案中,有乙個find()函式,就可以完成這個功能。

#include #include using namespace std;

bool myfind(vector& vec, int num)

} return flag;

}int main() ;

cout << myfind(a, 6) <

練習 9.5 :

重寫上一題的函式,返回乙個迭代器執指向找到的元素。注意,程式必須處理未找到給定值的情況。

解答:#include #include using namespace std;

auto myfind(vector& vec, int num) -> vector::iterator

} return vec.end() - 1; // 當沒有找到時,返回指向容器中最後乙個元素的指標

}int main() ;

cout << *myfind(a, 6) <

下面程式有何錯誤?你應該如何修改它?

listlst1;

list::iterator iter1 = lst1.begin(),

iter2 = lst1.end();

while(iter1 < iter2) /* ... */

解答:迭代器之間沒有辦法比較大小。迭代器有減法操作,但是只適用於連續儲存的物件,比如vector、陣列。

這裡使用的是list,所以在儲存空間上不一定連續。

同樣在標準庫中,list的迭代器也不支援相減的操作。

這裡,就直接比較兩個list迭代器指向的值吧(比較簡單的情況)

listlst1;

list::iterator iter1 = lst1.begin(),

iter2 = lst1.end();

while(*iter1 < *iter2) /* ... */

第九章 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...

第九章 9 3 6節練習

練習9.31 第316也中刪除偶數值的元素並複製技術值元素的程式不能用於list或forward list。為什麼?修改程式,使之也能用於這些型別。解答 首先,316頁中的程式主要做的是插入和刪除操作,這個操作對於鍊錶容器來說不影響其迭代器和指標。不過,插入和刪除操作會讓其他容器的迭代器指標失效。所...

第九章 9 4節練習

練習9.35 解釋乙個vector的capacity和size有何區別。解答 引用 容器的size是指它已經儲存的元素數目 而capactiy則是在不分配新的記憶體空間的前提下最多可以儲存多少元素。練習9.36 乙個容器的capacity可能小於他的size嗎?解答 從定義上來說,這個是不可能的。練...