練習 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嗎?解答 從定義上來說,這個是不可能的。練...