博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
STL顺序容器总结
阅读量:5240 次
发布时间:2019-06-14

本文共 1720 字,大约阅读时间需要 5 分钟。

顺序容器总结:

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之前插入花括号包围的元素列表,返回指向第一个新添加元素的迭代器

 

 

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

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

比如(idname分别是某一对象构造函数的参数)

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容器不使用上面的insertemplaceerase,它使用自己的成员函数:

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

insertinsert_after的区别:

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

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

eraseerase_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个元素的空间,元素数不变

转载于:https://www.cnblogs.com/runninglzw/p/4732945.html

你可能感兴趣的文章
Leetcode: Unique Binary Search Trees II
查看>>
C++ FFLIB 之FFDB: 使用 Mysql&Sqlite 实现CRUD
查看>>
Spring-hibernate整合
查看>>
c++ map
查看>>
exit和return的区别
查看>>
discuz 常用脚本格式化数据
查看>>
洛谷P2777
查看>>
PHPStorm2017设置字体与设置浏览器访问
查看>>
Django 相关
查看>>
git init
查看>>
训练记录
查看>>
IList和DataSet性能差别 转自 http://blog.csdn.net/ilovemsdn/article/details/2954335
查看>>
Hive教程(1)
查看>>
第16周总结
查看>>
C#编程时应注意的性能处理
查看>>
Fragment
查看>>
比较安全的获取站点更目录
查看>>
苹果开发者账号那些事儿(二)
查看>>
使用C#交互快速生成代码!
查看>>
UVA11374 Airport Express
查看>>