順序容器

何時迭代器失效

如果向容器的插入和刪除造成元素移動,迭代器就會失效;如果引起內存重新分配,那麼就會全部失效。

emplace_back和push_back

push_back調用的是拷貝構造函數,而emplace_back調用的是構造函數。

c.emplace_back("1",2,3);
c.push_back("1",2,3);  //xxx,不支持

c.push_back(Sales_data("1",2,3)); 

成員函數返回的是引用

什麼at,front,back返回的都是引用,如果容器是const的,就返回const引用,否則是普通引用。

auto &a1 = c.back();  //a1是引用
auto a2 = c.back();  //a2 是c.back()的拷貝。

c[n]和c.at(n)

區別就是前者運行時報錯,後者編譯時報錯。

vector<string> svec;
cout<<svec[0];   //xxx,運行出錯
cout<<svec.at(0);

vector的增長 

爲了減小內存分配的次數,vector會預先分配大於需要的內存。capacity()代表真實的內存,size()代表佔用的內存。reserve()改變capacity,resize()改變size。

適配器

stack,queue,priority_queue。適配器要滿足的操作決定其可以構造於什麼容器之上,比如queue需要back,push_back,front和push_front,所以只能通過list和deque,不能通過vector構造。

stack,queue默認deque,priority_queue默認vector,可以指定用什麼容器。

stack<string,vector<string>> sstack;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章