STL顺序容器总结

顺序容器总结:

array:固定大小的数组,支持快速访问,不能添加和删除元素

vector:动态数组,支持快速访问,但在尾部之外插入或删除元素会很慢

string:与vector相似的容器,用于保存字符

deque:双向队列,支持快速随机访问,在头尾位置插入元素速度很快

list:双向链表,支持双向访问,在链表任何位置插入和删除元素都很快

forward_list:单向链表,只支持单向访问,在链表任何位置插入和删除元素都很快

1.插入元素(除array外,因为array中数据是固定的):

push_back(x)

empalce_back(x)  在容器尾部插入一个元素x,返回void

push_front(x)

empalce_front(x)  在容器头部插入一个元素x,返回void

insert(p,x)

emplace(p,x)     在迭代器p之前插入x,返回指向新添加元素的 迭代器

insert(p,n,t)   在迭代器p之前插入n个元素,值为t,返回指向第一个新添加元素的迭代器

insert(p,b,e)  在迭代器p之前插入迭代器b,e之间的元素,返回指向第一个新添加元素的迭代器

insert(p,li) 在迭代器p之前插入花括号包围的元素列表,返回指向第一个新添加元素的迭代器

可以注意到:push和emplace都可以插入到容器中,这两个函数的区别是什么呢?

当调用push成员函数时,将元素类型的对象传给形参,这些类型被拷贝到容器中,而emplace成员函数是自己在容器内存空间中构造元素。

比如(id和name分别是某一对象构造函数的参数):

C.emplace_back(“id”,”name”);  正确:它可以直接调用对象的构造函数来实例化元素

C.push_back(“id”,”name”);   错误:不可以调用构造函数

2.访问元素

back() 返回尾部元素的引用

front() 返回头部元素的引用

C[n]和C.at(n)  返回指定下标的引用,区别是后者如果下标越界则抛出异常

back()相当于*(--c.end())

front()相当于*c.begin()

3.删除元素

pop_back() 删除尾部元素

pop_front() 删除头部元素

erase(p)    删除迭代器p指向的元素,返回被删除元素之后的元素的迭代器

erase(b,e)   删除迭代器b,e之间的元素,返回被删除元素之后的元素的迭代器

clear()    删除所有元素

forward_list容器不使用上面的insert、emplace和erase,它使用自己的成员函数:

insert_after()和erase_after():参数和上面的一致

insert和insert_after的区别:

insert在迭代器p之前插入元素,并且返回指向第一个插入元素的迭代器

insert_after在迭代器p之后插入元素,并且返回指向最后一个插入元素的迭代器

erase和erase_after的区别:

erase 删除迭代器p指向的元素

erase_after 删除迭代器p之后的元素,他们都返回一个指向被删除元素之后的元素的迭代器

4.管理容器容量的成员函数:

shrink_to_fit()  将容量减少为可以容纳此时元素个数size()的大小

capacity()   重新分配内存空间时的元素数(意思是此时最多能存多少个元素)

reserve(n)   重新分配可以容纳n个元素的空间

Q1:capacity()和size()的区别:

前者表示此时分配的容量所能容纳的元素个数,不重新分配内存

后者表示此时容器中的元素数

Q2:resize(n)和reserve(n)的区别:

前者表示改变容器中元素的数目,如果n小于此时存的元素数,则删除后面的元素,n>此时存的元素数,则添加新元素并初始化(可以使用resize(n,t):新加元素全部初始化为t),该函数不新分配内存

后者表示重新分配可以容纳n个元素的空间,元素数不变

时间: 2024-10-05 16:41:30

STL顺序容器总结的相关文章

STL顺序容器【vector】【deque】【list】

我们都知道,stl容器中将容器分为两类,顺序容器和关联容器. 顺序容器有三种即vector,deque,以及list 一:顺序容器的常用操作 1:首先顺序容器的迭代器 定义:T<C>::iterator iter; /*支持所有顺序容器*/ *iter返回迭代器的引用 iter->mem 对iter解引用,等效于(*iter).men ++iter|iter++自加 --iter|iter--自减 iter1==iter2  |  iter1!=iter2比较 /*只支持vector 和

【C++】STL容器归纳总结(一)顺序容器

顺序容器: 顺序容器包括:vector.deque.list.forward_list.array以及string vector:可变大小数组,即将元素保存在一段连续的内存空间中.支持快速随机访问.在尾部之外的位置插入删除元素可能会很慢. PS:当元素已经占满了预先分配的内存空间,插入新的元素时,开辟一段新的内存空间,大小为之前vector的两倍,再将vector内的元素拷贝到新的内存空间内. vector的插入删除操作会造成迭代器的失效 list:双向链表.只支持双向顺序访问.在list任何位

0716-----C++Primer听课笔记----------STL之顺序容器、迭代器

1. 顺序容器的初始化操作 1.1 顺序容器(vector,list,deque)的五种初始化方法,以 vector 为例. #include <iostream> #include <string> #include <vector> using namespace std; int main(int argc, const char *argv[]) { //1.定义空数组 然后后面追加 vector<string> vec1; vec1.push_ba

【STL容器学习笔记】-顺序容器

STL提供了三个顺序容器:vector.list和deque.Vector和deque都是用数组来实现的,list是用链表来实现的.关于三者的实现原理和各自应用的场景我们做一下分析. 1.vector就是动态数组,它是在堆中分配内存,如果vector中元素个数大于当前大小时,就会再分配内存.它拥有一段连续的内存空间,并且起始地址不变,因此它能很好地支持随机访问元素,即[ ]操作符.vector对末尾元素进行操作(添加或者删除元素)最快,因为不用移动内存.但如果是在中间位置插入或者删除元素,因为要

顺序容器和关联容器的特点&amp;STL各容器粗略对比

顺序容器和关联容器的特点1.所有的关联容器都会自动排序,但map和set不允许重复元素,而multimap和multiset允许重复元素 2.关联容器中,map和multimap的key和val是分开的,而set和multiset的key和val是相同的 3.除了vector和deque的迭代器为随机迭代器之外,其余容器的迭代器都是双向迭代器,不能进行++操作 4.顺序容器的insert函数的三种形式为: iterator insert(iterator position, value_type

STL 笔记(一): 顺序容器 vector、list、deque

STL 容器类 C++ STL 体现了泛型编程的思想,广义上分为: 容器 (Container),迭代器 (Iterator),算法 (Algorithm).容器类可以包含一组相同类型或不同类型的对象,包含相同类型对象时称为同类容器类,包含不同类型对象时,称为异类容器类.容器类库共包含 10 种容器,分为三类: 顺序容器:向量 (vector).双端队列 (deque).列表 (list); 关联容器:集合 (set).多重集合 (multiset).映射 (map)和多重映射 (multima

c++11 顺序容器概括(1)

第一篇博文,希望不是最后一篇.o(∩_∩)o 哈哈 接下来几篇博文会由浅到深地介绍 STL 超好用的顺序容器. 容器:  就是一些特定类型对象的集合. 顺序容器:  定义:顺序容器是容器的一类.该类容器中,对象(元素)在 容器中的位置 与加入容器的顺序相对应,不依赖元素的值.         注意:顺序容器几乎可以保存任意类型的元素,但可能限制元素容器操作.详情请看下篇博文. 所有顺序容器公共的 特点 :  所以顺序容器都提供了快速顺序访问元素的能力. 顺序容器的类型 vector(常用) 1.

STL之容器适配器stack的实现框架

说明:本文仅供学习交流,转载请标明出处,欢迎转载! 一提到适配器(adapter).我们就想到了早期用电话线上网所用的调制解调器,俗称"猫"."猫"的作用是实现数模转化和模数转化,在client,它能够将电话的模拟信息转化为我们计算机能够接收的数字信息,所以猫相当于一个转换器.再举个更加好理解的样例来说明"适配器"的含义.相信在我们每一个人的家里都有插排,如果就这么一种情况.如今我们家里的墙壁上仅仅有一个三角的插口,而我们的电视却是两个口,怎么办

C++学习之顺序容器(一)

一个容器就是一些特定类型对象的集合.顺序容器(sequential container)为我们提供了控制元素存储和访问顺序的能力.这种顺序不依赖于元素的值,而是与元素加入容器时的位置向对应. 顺序容器类型概述 容器名称 容器特性 访问特性 修改特性 vector 可变大小数组 随机 尾部插入/删除速度快 deque 双端队列 随机 头尾位置插入/删除速度快 list 双向链表 双向顺序 任意位置插入/删除均很快 forward_list 单项链表 单向顺序 任意位置插入/删除均很快 array