C Prime 第九章前30題

2021-10-07 09:19:50 字數 4389 閱讀 5288

(a)選擇list,因為可能在容器中間插入元素.也可以選擇vector,全部讀取完畢後,直接sort.

(b)選擇deque,因為插入刪除操作只在頭部進行.

(c)選擇vector.

list> data;
迭代器範圍:兩個迭代器指向同一容器,或者是容器最後乙個元素之後的位置,begin遞增若干次後等於end.

#include #include #include #include #include #include using namespace std;

typedef vector::iterator iter;

bool find_value(iter beg, iter end, int n)

int main()

; if (find_value(data.begin(), data.end(), 3))

cout << "find it\n";

else

cout << "don't find!\n";

return 0;

}

#include #include #include #include #include #include using namespace std;

typedef vector::iterator iter;

iter find_value(iter beg, iter end, int n)

return p;

}int main()

; if (data.end() != find_value(data.begin(), data.end(), 3))

cout << "find it\n";

else

cout << "don't find!\n";

return 0;

}

只有vector string array deque的迭代器可以執行關係運算.改正: while(iter1 != iter2)

vector::size_type;

//or

vector::iterator;//const_iterator

string::const_iterator;

list::iterator;

begin()的返回值取決於容器的型別.容器是const 的,則begin()返回的是const_iterator,否則返回iterator

cbegin()一定返回常量迭代器const_iterator

it1是vector::iterator

it2,it3,it3是vector::const_iterator

vectora1;//預設初始化,空物件

vectora2(a1);//a2 == a1

vectora22 = a1; //a22 == a1

vectora3; //a2 ==

vectora32 = ;

vectora4(a3.begin(), a3.end()); //a4 == a3

vectora42(a3.begin(), a3.begin() + 2);

vectora5(10);//10個0

vectora6(10, 2);//10個2

接受乙個容器建立其copy要求 :兩個容器型別必須相同,元素型別必須相同.

接受兩個迭代器建立copy的建構函式:兩個容器型別可以不同,元素型別也可以不同(要能轉換成接受容器的元素型別)

lista;

vectorb(a.begin(),a.end());

for (const auto& x : b)

cout << x << " ";

cout << endl;

listlc;

vectordata;

data.assign(lc.begin(), lc.end());

#include #include #include #include #include #include using namespace std;

int main()

; listk2;

if (k1 == k2)

cout << "相等" << endl;

else

cout << "不等" << endl;

return 0;

}

方法一:逐個元素比較,還要考慮兩個容器長度不等的情況.

方法二:先用list初始化乙個vector,然後比較兩個vector即可,**簡潔,效率不如方法一.

三點限制.

其一:c1和c2必須是相同型別的容器.

其二:c1和c2的元素型別必須相同.

其三:c1和c2的元素必須支援"="和"<"運算子.比如沒有過載"="或"<"的自定義類,不能按照題目判斷.

#include #include #include #include #include #include #include using namespace std;

templatevoid print(const t& t)

list和deque可以使用inset,push_back,push_front,emplce所有函式,本體直接把deque換成list無問題.

vector和string,不能使用頭插類的兩個push_front和emplace_front,insert沒問題,用insert來實現頭部插入

forward_list不支援尾插的兩個,同時insert和emplace也是自己的專有版本.

array不支援上述所有.

雖然支援,卻不一定最優,合理選擇容器和方法.

#include #include #include #include #include #include #include using namespace std;

templatevoid print(const t& t)

; dequed1, d2;

for (auto p = data.begin(); p != data.end(); ++p)

print(d1);

print(d2);

return 0;

}

每一次插入都要移動當前所有元素,極其無效率.

對vector,string,deque(就是除了鍊錶的那些) 一旦插入資料,迭代器,指標,引用全部失效.

修改:不會!

全為首元素的值,

int main()

catch (out_of_range)

data.push_back(123);

if (!data.empty())

return 0;

}

範圍的兩個迭代器相等,不刪.

第二個迭代器時尾後,第乙個不是尾後,則刪除第乙個迭代器所指及其後的所有元素

都是超尾迭代器.不刪,

#include #include #include #include #include #include #include #include using namespace std;

templatevoid print(const t& t)

auto q = li.begin();

while (q != li.end())

print(vi);

print(li);

return 0;

}

forward_lista;

auto pre = a.before_begin();

auto p = a.begin();

while (p != a.end())

}

#include #include #include #include #include #include #include #include using namespace std;

templatevoid print(const t& t)

else

}if (!find_s1)

p = word.insert_after(pre, s2);

}int main()

擴充75的容量,新元素執行值初始化.

刪除後部90個元素.

resize的要求如果是類型別,要麼該類具有預設建構函式,要麼顯示初始化

既然是單引數版本的resize,這個唯一的引數用來指明容量的大小,則無法進行顯示初始化,故類必須包含預設構造方法

第九章程式設計題 補充題

課本p150 volatile不能保證原子操作,用synchronized關鍵字修飾方法能保持同步。按題目 如何將某個物件的a方法內的乙個 塊和另乙個方法b實現同步 可以將物件的a方法內的乙個 塊用synchronized修飾,另乙個方法b也用synchronized修飾,就能實現同步。但是好亂,讓...

第九章(筆記)

轉移指令是可以修改ip,或同時修改cs和ip的指令 offset 是用於提取標號偏移位址的操作符 jmp在第2章裡說到時用於修改ip或同時修改cs和ip的轉移指令,這章裡單獨的jmp指令是乙個無條件的轉移指令 jmp short 標號 是實現段內短轉移 jmp near ptr 標號 是實現段內近轉...

第九章作業

班級 0401304 學號 2013211526 姓名 鄧小俊 2.身份驗證 依據使用者所提供的身份資訊,來進行登入驗證,可以再細分為使用者是否可以登入sql sever 使用者是否可以登入到指定的目標資料庫等。授權 已通過身份驗證的使用者,檢查其所被賦予的許可權,是否可以訪問或者執行目標的物件 3...