(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...