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

2021-06-23 08:07:20 字數 1776 閱讀 2293

練習 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...