顺序容器
容器(如同一种线性链表的数组)
顺序容器:单一类型的元素,排列顺序与元素添加的次序有关。
三种顺序容器:vector list deque
定义某种类型的容器的时候必须在容器名后面加一对尖括号,里面填充元素的类型。
所有容器的默认构造函数都是创建一个空对象。
容器元素的初始化:
- C<T> c创建了一个名为c的空容器。C的容器的类型,T为元素的类型。使用于所有的容器。
- C c(c2) 创建容器c2的副本c,两者必须有相同的容器类型,必须存放相同类型的元素。适用于所有容器。
- C c(b,e) 创建c,元素为迭代器b,e之间的元素副本。不要求容器的类型相同,也不需要元素类型相同,只要是兼容的就可以。E是永远都不可能超过B。适用于所有容器。
- C c(n,t) 用n个值为t的元素初始化闯将的容器c,t的类型必须与C的类型匹配。只适用于顺序容器。
- C c(n) 创建有n个值初始化元素的容器c。只适用于顺序容器。
容器内的元素的类型约束:
元素的类型必须可以赋值和复制的。注意:不要使用引用类型。
容器迭代器的操作:见c++primer P 268~269
顺序容器元素的添加:(注意添加后迭代器可能会失效,注意重定位)
1.c.push_back(t)
2. c.push_front(t) 在前端插入,只用在list和deque中
3. c.insert(p,t) 在迭代器p之前插入值为t的新元素。
4. C.insert(p,n,t) 在迭代器p之前插入N个值为t的新元素。
5. c.insert(p,b,e) 在迭代器p之前插入由迭代器b到迭代器e之间的新元素。
顺序容器大小的操作:(注意迭代器的重定位)
Size和empty为已知。
c.resize(n) 调整容器的长度为n,“多除少补””后部删除,后部添加”
c.resize(n,t) 调整容器的长度为n,“多除少补”新添加的元素初始化为t.
顺序容器中元素的删除:(保证迭代器的有效性)
1.c.erase(p) 删除迭代器p指向的元素,返回一个迭代器指向被删除的元素后面的元素。
2.c.erase(b,e)删除迭代器b和e之间的所有元素,返回一个迭代器指向被删除元素的后面的元素,如果e为超出末端的下一位置,则返回迭代器指向容器末端的一下位置。
3.c.clear() 清空容器,返回空指针。
4.c.pop_back() 删除容器最后一个元素,返回void
5.c.pop_front() 删除容器的第一个元素,返回void 只用于list和deque。
容器之间的赋值操作实际是先删除左操作数的所有元素,再将右操作数的所有元素都插入到左边的容器中。赋值后两个容器完全相同。
操作:1.c1.swap(c2);交换c1和c2的内容,但是迭代器不会失效。减少了删除元素的成本。
交换的对象必须是同类型的容器,和元素的类型是相同的。
2. c.assign(b,e) 重新设置c中的元素,将迭代器之间的元素都赋值到c中,b,e必须不是只想c中元素的迭代器。
3. c.assign(n,t) 将c容器重新设置为n个值为t的对象。
浙公网安备 33010602011771号