練習 9.23:
在本節第乙個程式(第309頁)中,做c .size()為1,則val, val2, val3,和val4的值會是什麼?
解答:如果這幾個值都合法存在,val2和val4相等,val指向的是容器內第乙個值,val3指向的是乙個非法的位址,在容器最後乙個元素之外的位址。
練習9.24:
編寫程式,分別使用at、下標運算子、front和begin提取乙個vector中的第乙個元素。在乙個空vector上測試你的程式。
解答:
#include #include using namespace std;
int main() ;
cout << vec[0] << endl;
cout << vec.at(0) << endl;
cout << vec.front() << endl;
cout << *vec.begin() << endl;
}
練習9.25:
對於第312頁中刪除乙個範圍內的元素的程式,如果elem1與elem2相等會發生什麼?如果elem2是尾後迭代器,或者elem1和elem2皆為尾後迭代器,又會發生什麼?
解答:①相等的時候不會刪除任何元素。
②參考cppreference
iterator erase (const_iterator first, const_iterator last);當只有elem2為尾後迭代器的時候,程式編譯會出錯。因為尾後迭代器和普通迭代器屬於不同的型別。
③與②的情況相同。
ps. 這裡也可能和我使用的編譯器有關係,這道題我用的vs2013來進行的。
練習9.26:
使用跟下面**定義的ia,將ia拷貝到乙個vector和乙個list中。使用但迭代器版本的erase從list中刪除奇數元素,從vector中刪除偶數元素。
int ia = ;
解答:
#include #include #include #include using namespace std;
void oddvessel(vector& vec)
else }}
void evenvesse(list& li)
else }}
int main() ;
auto first = begin(ia);
auto last = end(ia);
vectorivec(first, last);
cout << "the original vector elements:" << endl;
for (auto i : ivec)
cout << endl;
listilist(first, last);
cout << "the original list elements:" << endl;
for (auto i : ilist)
cout << endl;
oddvessel(ivec);
evenvesse(ilist);
cout << "the odd vector elements:" << endl;
for (auto i : ivec)
cout << endl;
cout << "the even list elements:" << endl;
for (auto i : ilist)
cout << endl;
}
第九章 9 1節練習 9 2節練習
練習9.1 對於下面的程式任務,vector deque和list那種容器最為適合?解釋你的選擇理由。如果沒有哪一種容器優於其他同期,請解釋理由。a 讀取固定數量的單詞,將他們按字典序插入到容器中。我們將在下一章中看到,關聯容器更適合這個問題。b 讀取未知數量的單詞,總是將新單詞插入到末尾。刪除操作...
第九章 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...