顺序容器

何时迭代器失效

如果向容器的插入和删除造成元素移动,迭代器就会失效;如果引起内存重新分配,那么就会全部失效。

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;

 

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