1、我们不能对内置数组进行拷贝,但是可以对array进行拷贝:
eg,inta[10]={1,2,3,4,,5,6};
int copy[10]=a //wrong
array<int ,10> arr={1,2,3,4,5,6};
array<int ,10> arr1=arr //right
2,顺序容器操作:
1)除了array和forward_list外,每个容器都支持push_back将一个元素追加到数组的尾部。
2)除了push_back, list、forward_list、deque容器还支持push_front操作,将元素插入到容器的头部。
3)支持insert操作的容器有,vector、deque、list、和string
eg,vector<int> sevc;sevc.insert(sevc.begin(),1);警告:插入到vector末尾之外的任何位置都可能很慢
4)访问元素有c.back();c.front();c[n],c.at(n)其中支持at操作的有string、vector、deque、array
5)删除元素pop_front()和pop_back()用法和push_front和push_front相同;c.erase(p)删除迭代器p所指向的元素
eg,list<int> lst={12,3,4,5,6,5,7,8,9,};
auto it=lst.begin();
while(it!=lst.end())
{
if(*it%2)
{
it=lst.Erase(it);
}
else{it++;}
}
5)改变容器的大小,我们可以用resize来增大或缩小容器。array不支持resize
eg,list<int> llst(10,32);
llst.Resize(15);
6)vector对象是如何增长的
为了支持快速访问,vector将元素连续存储--每个元素紧挨着前一个元素存储,考虑向vector和string中插入新元素时,如果没有足够的空间容纳新元素,容器不能简单的将它添加到内存中,因为元素必须是连续的,容器必须分配新的空间来保存已有元素和新元素,将已有的元素从旧位置移动到新空间,然后添加新元素,释放旧的空间。为了避免多次分配新空间,标准库实现者采用可以减少容器分配次数的策略,当不得不分配新空间时,vector和string通常会分配比新空间需求更大的内存空间以作备用。
7)容器中capacity和size的区别:
容器的size是指它保存的元素的数目;而capacity则是指不分配新内存空间的前提下它最多可以保存多少个元素,具体的值依赖于标准库的实现