文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C++ 基础函数的介绍及使用(Vector+deque+STL)

2024-04-02 19:55

关注

一、Vector的基础函数

之前有学习过 vector、set、map等容器,都是需要什么搜什么,没有详细的了解其中的内容。最近在看 STL 的相关内容,就顺手整理一些基础性内容,避免以后遇到的时候再临时抱佛脚。

1. 构造函数

vector<T> v;     //创建一个空的vector
vector<T> v(int nSize, const t& t);     //创建一个vector,元素个数为nSize,元素值均为t
vector<T> v(int nSize);     //创建一个vector,元素个数为nSize
vector<T> v(const vector&);     //复制构造函数
vector<T> v = vector(begin,end);     //复制[begin,end]范围内另一个数组的元素到 v中

2. 增加元素

v.push_back(const T& x);     //在vector尾部增加一个元素x
v.insert(iterator it, const T& x);     //在vector中迭代器指向的元素前插入一个元素x
v.insert(iterator it, int n,const T& x);     //在vector中迭代器指向的元素前插入n个相同的元素x
v.insert(iterator it,const_iterator first,const_iterator last);     //在vector中迭代器指向的元素前插入另一个相同类型vector中[first,last]间的元素

3. 删除元素

v.erase(iterator it);     //删除vector中迭代器指向的元素
v.erase(iterator first, iterator last);     //删除vector中[first,last)的元素
v.pop_back();     //删除vector中的最后一个元素
v.clear();     //清空向量中的所有元素

4. 遍历vector

v.at(int nPos);     //返回nPos位置元素
v.front();     //返回vector的首元素
v.back();     //返回vector的尾元素
v.begin();     //返回指向第一个元素的迭代器
v.end();     //返回指向最后一个元素下一位置的迭代器
v.rbegin();     //反向迭代器,指向最后一个元素
v.rend();     //反向迭代器,指向第一个元素的前一个位置

5. 判断函数

v.empty();     //判断vector是否为空

6. 大小函数

v.size();     //返回vector中元素个数
v.capacity();     //返回当前vector中所能容纳的最大元素个数
v.max_size();     //返回当前vector最大可允许的元素数量个数

7. 其他函数

v.swap(vector& v2);     //交换两个同类型的vector
v.assign(int n,const T& t);     //设置vector中第n个元素的值为t
v.assign(const_iterator first,const_iterator last);     //vector中[first,last)中的元素设置成当前vector元素

二、deque的介绍及使用

deque(double ended queue) 作为双端队列,不论在尾部或头部插入元素,都十分便捷。而在中间插入元素会比较费时,因为必须移动中间其他的元素。

双端队列是一种随机访问的数据类型,提供了在序列两端快速插入和删除的功能,它可以在需要的时候改变自身大小,完成了标准 C++ 数据结构中队列的所有功能。

三、deque 和 vector的差别

虽然 deque 也提供 Random Access Iterator,但它的迭代器并不是普通的指针,复杂度较高。因此除非必要,应尽可能选择使用 vector 而非 deque。对 deque 的排序操作,可以先完整复制到一个 vector 中,使用 STL 中的排序操作对 vector 排序后,再复制回 deque。

deque 通常由一些独立的区块组成,第一个区块朝某方向扩展,最后一个区块朝另一方向扩展。它允许较为快速地随机访问,但不像 vector 一样把所有对象保存在一个连续的内存块,而是多个连续的内存块,并且在一个映射结构中保存对这些块以及顺序的跟踪。

1、构造函数

#include<deque>
deque<type> deq;            //声明一个元素类型为 type 的双端队列 deq
deque<type> deq(nSize);            //声明含有 nSize 个默认初始化元素的 deq
deque<type> deq(nSize, value)            //声明含有 nSize 个值为 value 的元素的deq
deque<type> deq(MyDeque);            //复制MyDeque到deq
deque<type> deq(first, last);            //使用迭代器first,last范围内的元素初始化deq

2、常用成员函数

deq[nPos];            //访问双向序列中 nPos 位置上的元素
deq.front();            //返回第一个元素
deq.back();            //返回最后一个元素
deq.push_front(x);            //把元素 x 插入到 deq 的头部
deq.pop_front();            //弹出 deq 的第一个元素
deq.push_back(x);            //把元素 x 插入到 deq 的尾部
deq.pop_back();            //弹出 deq 的最后一个元素

3、特点

四、STL中容器的通用操作函数

最近在学习 C++ 中 STL 标准库中的东西,关于list、vector、deque、set、map等容器的操作函数中存在一些通用函数,整理出来一起学习。

1. 构造函数

ContType<T> C;            //创建一个空容器
ContType<T> C(nSIze);        //创建一个含有 nSize 个默认元素的容器
ContType<T> C(nSize, Value);    //创建一个含有 nSize 个值为 Value 的元素的容器
ContType<T> C1(C2);  //复制一个同类型容器
ContType<T> C(first, last);      //复制[first,last)范围内的元素到新容器中
C.~ContType();            //删除所有元素,释放内存

2. 判断函数

C.empty();            //判断容器是否为空
C1==C2;            //判断c1是否等于c2

3. 访问函数

lst.get_allocator();        //返回容器的内存模型
C.begin();        //正向迭代器,指向第一个元素
C.end();         //正向迭代器,指向最后一个元素的下一位置
C.rbegin();     //反向迭代器,指向最后一个元素
C.rend();      //反向迭代器,指向第一个元素的前一个位置
C.size();      //返回容器当前存储的元素数量
C.max_size();  //返回容器能容纳的最大元素数量

4. 赋值函数

C1=C2;//将c2的值赋给c1

//swap()交换函数
C1.swap(C2);//交换c1和c2的数据
Swap(C1,C2);//同上

//assign()赋值函数
C.assign(size_type nSize, const_type Value);        //将list中元素替换为 nSize 个值为 Value 的元素
C.assign(iterator first,iterator last);        //将[first,last)中的元素复制到当前容器中
C.assign(ContType<T> &C2);           //将另一个容器中的元素复制到当前容器中

5. 操作函数

C.clear();//清空容器

//insert()插入元素
C.insert(iterator iter, const_type Value);//在 iter 指向的位置插入值为 Value的元素
C.insert(iterator iter,size_type num, const_type &Value);//在 iter 指向的位置插入 num 个值为 Value的元素
C.insert(iterator iter,iterator fisrt,last);//在 iter 指向的位置插入[first,end)区间内的所有元素

//erase()删除元素
C.erase(nPos,nSize);//删除从下标 nPos 开始的 nSize 个元素
C.erase(iterstor iter);//删除该迭代器指向的元素
C.erase(iterator first,iterator lase);//删除[first,last)区间的元素

//vector、deque、list
C.front();        //返回第一个元素
C.back();        //返回最后一个元素
C.resize();        //改变list的大小
//deque、list
C.pop_front();        //删除第一个元素
C.push_front(Value);        //在容器头部添加一个元素Value
//vector、deque、list
C.front();               //返回第一个元素
C.back();               //返回最后一个元素
C.resize();             //改变list的大小
C.pop_back();           //删除最后一个元素
C.push_back(Value);     //在容器末尾添加一个元素Value
//vector、list
C.reverse();        //把list中的元素反转

到此这篇关于C++ 基础函数的介绍及使用(Vector+deque)的文章就介绍到这了,更多相关C++ deque Vector内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯