何時迭代器失效
如果向容器的插入和刪除造成元素移動,迭代器就會失效;如果引起內存重新分配,那麼就會全部失效。
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;