STL—— 3种顺序容器的基本功能和特性
2016-05-31 16:28
267 查看
1.顺序容器的基本功能
STL中的顺序容器包括向量(vector)、双端队列(deque)和列表(list)
(1)构造函数
<span style="font-size:12px;">S s(n,t); //构造一个由n个t元素构成的容器实例s。
S s(n); //构造一个有n个元素的容器实例s,每个元素都是T()。
S s(q1,q2);//使用将[q1,q2)区间内的数据作为s的元素构造s。</span>
(2)赋值函数
<span style="font-size:14px;">s.assign(n,t) //赋值后的容器由n个t元素构成。
s.assign(n) //赋值后的容器有n个元素的容器实例s,每个元素都是T()。
s.assign(q1,q2) //赋值后的容器的元素为[q1,q2)区间内的数据。</span>
(3)元素的插入
<span style="font-size:14px;">s.insert(p1,t) //在s容器中,p1所指向的位置插入一个新的元素t,插入后的元素夹在原p1和p1-1所指向的元素之间,该函数会返回一个迭代器指向新插入的元素。
s.insert(p1,n,t) //在s容器中p1所指向的位置插入n个新的元素t,插入后的元素夹在原p1和p1-1所指向的元素之间,没有返回值。
s.insert(p1,q1,q2) //将[q1,q2)区间内的元素顺序插入到s容器中p1位置处,新元素夹在原p1和p1-1所指向的元素之间。</span>
(4)元素的删除
<span style="font-size:14px;">s1.erase(p1) //删除s1容器中p1所指向的元素,返回被删除的下一个元素的迭代器。
s1.erase(p1,p2)//删除s1容器中[q1,q2)区间内的元素,返回最后一个被删除元素的下一个元素的迭代器。</span><strong style="font-size:18px;">
</strong>(5)改变容器的大小
<span style="font-size:14px;">s1.resize(n) //将容器的大小变为n,如果原有的元素个数大于n,则容器末尾多余的元素会被删除;如果原有的元素个数小于n,则在容器末尾会用T()填充。</span>(6)首尾元素的直接访问
s.front() //获得容器首元素的引用。
s.back() //获得容器尾元素的引用。(7)在容器尾部插入、删除元素
<span style="font-size:14px;">s.push_back(t) //向容器尾部插入元素t。
s.pop_back() //将容器尾部的元素删除。</span>(8)在容器头部插入、删除元素
<span style="font-size:14px;">s.push_front(t) //向容器头部插入元素t。
s.pop_front() //删除容器头部的元素t。</span>
2.顺序容器特性比较
STL中的顺序容器包括向量(vector)、双端队列(deque)和列表(list)
(1)构造函数
<span style="font-size:12px;">S s(n,t); //构造一个由n个t元素构成的容器实例s。
S s(n); //构造一个有n个元素的容器实例s,每个元素都是T()。
S s(q1,q2);//使用将[q1,q2)区间内的数据作为s的元素构造s。</span>
(2)赋值函数
<span style="font-size:14px;">s.assign(n,t) //赋值后的容器由n个t元素构成。
s.assign(n) //赋值后的容器有n个元素的容器实例s,每个元素都是T()。
s.assign(q1,q2) //赋值后的容器的元素为[q1,q2)区间内的数据。</span>
(3)元素的插入
<span style="font-size:14px;">s.insert(p1,t) //在s容器中,p1所指向的位置插入一个新的元素t,插入后的元素夹在原p1和p1-1所指向的元素之间,该函数会返回一个迭代器指向新插入的元素。
s.insert(p1,n,t) //在s容器中p1所指向的位置插入n个新的元素t,插入后的元素夹在原p1和p1-1所指向的元素之间,没有返回值。
s.insert(p1,q1,q2) //将[q1,q2)区间内的元素顺序插入到s容器中p1位置处,新元素夹在原p1和p1-1所指向的元素之间。</span>
(4)元素的删除
<span style="font-size:14px;">s1.erase(p1) //删除s1容器中p1所指向的元素,返回被删除的下一个元素的迭代器。
s1.erase(p1,p2)//删除s1容器中[q1,q2)区间内的元素,返回最后一个被删除元素的下一个元素的迭代器。</span><strong style="font-size:18px;">
</strong>(5)改变容器的大小
<span style="font-size:14px;">s1.resize(n) //将容器的大小变为n,如果原有的元素个数大于n,则容器末尾多余的元素会被删除;如果原有的元素个数小于n,则在容器末尾会用T()填充。</span>(6)首尾元素的直接访问
s.front() //获得容器首元素的引用。
s.back() //获得容器尾元素的引用。(7)在容器尾部插入、删除元素
<span style="font-size:14px;">s.push_back(t) //向容器尾部插入元素t。
s.pop_back() //将容器尾部的元素删除。</span>(8)在容器头部插入、删除元素
<span style="font-size:14px;">s.push_front(t) //向容器头部插入元素t。
s.pop_front() //删除容器头部的元素t。</span>
2.顺序容器特性比较
操作 | 向量(vector) | 双端队列(deque) | 列表(list) |
随机访问 | 快 | 较慢 | 不能 |
头部插入 (push_front) | 没有push_front,只能用insert 完成 | 快, 已有迭代器失效,已有指针、 引用不会失效 | 快, 已有迭代器、指针、引用 都不会失效 |
头部删除 (pop_front) | 没有pop_front , 只能用erase 完成 | 快 只会使被删除元素的迭代器、 指针、引用失效 | 快 只会使被删除元素的迭代器、 指针、引用失效 |
尾部插入 (push_back) | 快 当发生容器扩展时,会使所有已有 的迭代器、指针、引用失效,否则 不会使任何已有的迭代器、指针、 引用受到影响 | 快 已有迭代器失效,已有指针、 引用不会失效 | 快 已有迭代器、指针、引用都不 会失效 |
尾部删除 (pop_back) | 快 只会使被删除元素的迭代器、指针、 引用失效 | 快 只会使被删除元素的迭代器、指针、 引用失效 | 快 只会使被删除元素的迭代器、指针、 引用失效 |
任意位置插入 (insert) | 插入位置越接近头部越慢。 当发生容器扩展时,会使所有迭代器、 指针、引用失效,否则之后使插入位置 之后的迭代器、指针、引用失效 | 插入位置越接近中间越慢 会使所有迭代器、指针、 引用失效 | 快 只会使被删除元素的迭代器、指针、 引用失效 |
任意位置删除 (erase) | 删除位置越接近头部越慢 只会使删除位置之后的迭代 器、指针、引用失效 | 删除位置越接近中间越慢 会使所有迭代器、指针、引用失效 | 快 只会使被删除元素的迭代器、指针、 引用失效 |
相关文章推荐
- TortoiseGit安装图解以及(no supported authentication methods avaiable)问题解决
- Android studio如何使用SVN进行版本控制
- 以两军问题为背景来演绎Basic Paxos
- 《CSS权威指南》学习记录——文本属性
- elasticsearch 自定义hash function (routing)
- Middle-题目57:90. Subsets II
- 微信公众号第三方开发之七提交全网发布
- 连续最大子序列和与最小子序列和
- iOS常用技术 - 本地搭建IPv6测试环境
- Windows server 2012远程桌面会话主机和远程桌面授权,server2012
- 应用包已上传,但itunesconnect后台构建版本处在正在审核中
- 【BZOJ1638】[Usaco2007 Mar]Cow Traffic 奶牛交通【DAG】【拓扑排序】【DP】
- Dos脚本 给当前文件夹下指定的后缀文件们重命名(文件名追加制定内容)
- Win7系统使用疑难解答报错0X80131700的解决方法
- 关于android R.layout 中找不到已存在的布局文件问题的解决
- PHP 通过命令行调用c++ exe程序
- Mac OS X 下 TAR.GZ 方式安装 MySQL
- Android学习笔记之Intent
- android多分辨率适配
- 如何将pdf转换成word文本文件