iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >如何在C++中使用 STL 顺序容器
  • 125
分享到

如何在C++中使用 STL 顺序容器

2023-06-15 00:06:13 125人浏览 独家记忆
摘要

今天就跟大家聊聊有关如何在c++中使用 STL 顺序容器,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。C++ 标准模板库 STL 顺序容器容器数据结构顺序性重复性支持迭代器vecto

今天就跟大家聊聊有关如何在c++中使用 STL 顺序容器,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

C++ 标准模板库 STL 顺序容器

容器数据结构顺序性重复性支持迭代器
vector动态数组无序可重复随机访问迭代器
deque双向队列无序可重复随机访问迭代器
list双向链表无序可重复双向迭代器

动态数组 vector

vector #include <vector> 动态数组:其元素在内存中是连续存放的,随机存取任何元素都可以在常数时间内完成,在该容器的尾部增删元素也几乎能够在常数时间内完成具有较好的性能。

一个 vector 常用函数使用实例如下:

#include <iOStream>#include <vector>using namespace std;template<class T>void printVector(T s, T e){    for(;s != e; ++s){        cout << *s << ' ';    }    cout << endl;}int main(){    int a[5] = {1,2,3,4,5};    vector<int> v(a,a+5);    cout << "1)" << v.end() - v.begin() << endl;    cout << "2)";    printVector(v.begin(), v.end());    v.insert(v.begin()+3, 100); // insert()函数插入元素    cout << "3)";    printVector(v.begin(), v.end());    vector<int> v2(5,0);    v2.insert(v2.begin()+2,v.begin(),v.end()); // insert() 函数数据块插入      cout << "4)";    printVector(v2.begin(), v2.end());       v.erase(v.begin()+3); // erase() 函数删除元素     cout << "5)";    printVector(v.begin(), v.end());    v.erase(v.begin()+2,v.begin()+4); // erase() 函数删除数据块    cout << "6)";    printVector(v.begin(), v.end());     return 0;}

构造函数

函数函数描述
vector构造函数创建一个 vector,可以设定大小 nSize
vector(const vector&)拷贝构造函数,可以对区间内另一个数组的元素进行拷贝
operator=将新内容分配给容器,替换其当前内容,并相应地修改其大小
assign将新内容分配给 vector,替换其当前内容,并相应地修改其 size

 容量管理函数

函数函数描述
size返回容器中元素的数量
max_size返回容器可容纳的最大元素数
resize调整容器的大小,使其包含 n(参数)个元素
capacity返回当前为 vector 分配的存储空间(容量)的大小
empty返回 vector 是否为空
reserve请求 vector 容量至少足以包含 n(参数)个元素
shrink_to_fit要求容器减小其 capacity(容量)以适应其 size(元素数量)

 增删函数

函数函数描述
push_back在容器的最后一个元素之后添加一个新元素
pop_back删除容器中的最后一个元素,有效地将容器 size 减少一个
insert通过在指定位置的元素之前插入新元素来扩展该容器,通过插入元素的数量有效地增加容器大小
erase从 vector 中删除单个元素(position)或一系列元素([first,last)),这有效地减少了被去除的元素的数量,从而破坏了容器的大小
clear从 vector 中删除所有的元素(被销毁),留下 size 为 0 的容器
emplace通过在 position(参数)位置处插入新元素 args(参数)来扩展容器
emplace_back在 vector 的末尾插入一个新的元素,紧跟在当前的最后一个元素之后

 索引函数

函数函数描述
operator[]返回容器中第 n(参数)个位置的元素的引用
at返回容器中第 n(参数)个位置的元素的引用
front返回对容器中第一个元素的引用
back返回对容器中最后一个元素的引用
data返回指向容器中第一个元素的指针

迭代器函数

函数函数描述
begin返回指向容器中第一个元素的迭代器
end返回指向容器中最后一个元素之后的理论元素的迭代器
rbegin返回指向容器中最后一个元素的反向迭代器
rend返回一个反向迭代器,指向中第一个元素之前的理论元素
cbegin返回指向容器中第一个元素的常量迭代器(const_iterator)
cend返回指向容器中最后一个元素之后的理论元素的常量迭代器(const_iterator)
crbegin返回指向容器中最后一个元素的常量反向迭代器(const_reverse_iterator)
crend返回指向容器中第一个元素之前的理论元素的常量反向迭代器(const_reverse_iterator)

用 vector 实现二维数组

#include <iostream>#include <vector>using namespace std;int main(){    vector<vector<int>> arr(3); // arr中有 3 个元素,每个元素都是 vector<int> 容器    for(int i=0; i<arr.size(); ++i){        for(int j=0; j<3; ++j){            arr[i].push_back(j);        }    }    for(int i=0; i<arr.size(); ++i){        for(int j=0; j<3; ++j){            cout << arr[i][j] << ' ';        }        cout << endl;    }    return 0;}

双向队列 deque

deque #include <deque> 双向队列:其元素在内存中是连续存放的,随机存取任何元素都可以在常数时间内完成,在该容器的两端增删元素也几乎能够在常数时间内完成具有较好的性能。

所有适用于 vector 的操作都适用于 deque,除此之外,deque 还有 push_front / pop_front 在最前端插入或删除元素的操作,复杂的都是 O ( 1 ) O(1) O(1) 。

函数函数描述
deque构造函数
push_back在容器的末尾添加一个新元素
push_front在容器的开头插入一个新元素
pop_back删除容器中的最后一个元素,同时将容器大小减少一个
pop_front删除容器中的第一个元素,同时将容器大小减少一个
emplace_front在容器的开头插入一个新的元素
emplace_back在容器的末尾插入一个新的元素

双向链表 list

list #include <list> 双向链表:其元素在内存中是不连续存放的,不支持随机存取,在该容器的任何位置增删元素几乎都能够在常数时间内完成具有较好的性能。

list 除了具有所有顺序容器都有的成员函数之外,还支持以下8个成员函数:


函数函数描述
push_front在容器的开头插入一个新元素
pop_front删除容器中的第一个元素
sort元素排序,值得注意的是 list 不支持 STL 算法中的 sort
remove删除和指定值相等的所有元素
unique删除所有和前一个元素相同的元素,使得元素不重复,使用之前需要sort
merge合并两个链表,并清空被合并的那个链表
reverse颠倒链表内容
splice在指定位置前面插入另一链表中的一个或多个元素,并在该链表中删除这些元素

一个 list 的成员函数使用实例如下:

#include <iostream>#include <list>#include <alGorithm>using namespace std;class A{    private:        int n;    public:        A(int n_){n = n_;}        friend bool operator<(const A & a1, const A & a2);        friend bool operator==(const A & a1, const A & a2);        friend ostream& operator<<(ostream & o, const A & a2);};bool operator<(const A & a1, const A & a2){    return a1.n < a2.n;}bool operator==(const A & a1, const A & a2){    return a1.n == a2.n;}ostream& operator<<(ostream & o, const A & a2){    o << a2.n;    return o;}template <class T>void printList(T start, T end){    for(;start != end; ++start){        cout << *start << ',';    }    cout << endl;}int main(){    list<A> lst1, lst2;    lst1.push_back(1); lst1.push_back(3);    lst1.push_back(2); lst1.push_back(4);    lst1.push_back(2);    lst2.push_back(10); lst2.push_back(50);    lst2.push_back(30); lst2.push_back(30);      lst2.push_back(40); lst2.push_back(40);     lst2.push_back(30); lst2.push_back(20);    cout << "1) ";    printList(lst1.begin(),lst1.end());    cout << "2) ";    printList(lst2.begin(),lst2.end());    lst2.sort(); // 调用 sort 成员函数进行 lst2 排序    cout << "3) ";    printList(lst2.begin(),lst2.end());    lst2.unique(); // 删除 lst2 中所有和前一个元素相等的元素    cout << "4) ";    printList(lst2.begin(),lst2.end());    lst2.pop_front(); // 将 lst2 的第一个元素删除    cout << "5) ";    printList(lst2.begin(),lst2.end());    lst1.remove(2); // 删除 lst1 中所有值为 2 的元素    cout << "6) ";    printList(lst1.begin(),lst1.end());    lst2.merge(lst1); // 将 lst1 中的元素合并到 lst2 并将 lst1 清空    cout << "7) ";    printList(lst2.begin(),lst2.end());    lst2.reverse(); // 颠倒 lst2    cout << "8) ";    printList(lst2.begin(),lst2.end());        lst1.push_back(100); lst1.push_back(200);     lst1.push_back(300); lst1.push_back(400);    cout<<"9) ";    printList(lst1.begin(),lst1.end());    // 找到列表中的指定元素    list<A>::iterator p1,p2,p3;    p1 = find(lst2.begin(),lst2.end(),4);    p2 = find(lst1.begin(),lst1.end(),200);    p3 = find(lst1.begin(),lst1.end(),400);    lst2.splice(p1,lst1,p2,p3); // 将 lst1 中 [p2,p3) 区间内的元素插入到 lst2 中 p1 位置之前,并将这些元素从 lst1 中删除    cout<<"10) ";    printList(lst1.begin(),lst1.end());    cout<<"11) ";    printList(lst2.begin(),lst2.end());        return 0;}

看完上述内容,你们对如何在C++中使用 STL 顺序容器有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网其他教程频道,感谢大家的支持。

--结束END--

本文标题: 如何在C++中使用 STL 顺序容器

本文链接: https://www.lsjlt.com/news/276343.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何在C++中使用 STL 顺序容器
    今天就跟大家聊聊有关如何在C++中使用 STL 顺序容器,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。C++ 标准模板库 STL 顺序容器容器数据结构顺序性重复性支持迭代器vecto...
    99+
    2023-06-15
  • C++STL中vector容器的使用
    目录一、vector(1)区分size()和capacity()(2)迭代器失效(3)区分const_iterator和const iterator(4)区分reserve()和re...
    99+
    2022-11-13
  • 如何在C++中使用STL关联式容器自定义排序规则
    如何在C++中使用STL关联式容器自定义排序规则?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1) 使用函数对象自定义排序规则#include <iostrea...
    99+
    2023-06-06
  • C++ STL 序列式容器与配接器的简单使用
    目录容器概述序列式容器 array vector list deque forward_list Adapter(配接器) stack queue priority_queue 容器...
    99+
    2022-11-12
  • C++深入分析STL中map容器的使用
    目录1、map容器2、map容器原理3、map容器函数接口4、使用示例1、map容器 map是C++ STL的一个关联容器,它提供一对一的数据处理能力。其中,各个键值对的键和值可以是...
    99+
    2022-11-13
  • C++顺序容器(vector、deque、list)的使用详解
    目录一:STL(Standard Template Library),即标准模板库,是一个高效的C++程序库二:STL组件三:容器四:类型成员五:迭代器六:顺序容器七:顺序容器--向...
    99+
    2022-11-13
  • C语言顺序表如何使用
    本篇内容介绍了“C语言顺序表如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!编程环境为 ubuntu 18.04。顺序表需要连续一片存...
    99+
    2023-06-30
  • C++如何实现顺序栈(使用模板类)
    目录一、思路二、遇到问题三、实现程序一、思路 1.用数组存储栈中的元素;2.用top保存栈顶的位置;3.进栈:top加1,然后在数组中的top位置插入x;4.出栈:top减1 二、遇...
    99+
    2022-11-13
  • C++中如何使用deque容器
    这篇文章主要介绍了C++中如何使用deque容器,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 deque 是 double-ended queue 的缩写,又称双...
    99+
    2023-06-15
  • C++中queue容器如何使用
    这篇“C++中queue容器如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++中queue容器如何使用”文章吧。q...
    99+
    2023-07-05
  • 怎么在C++中使用deque容器
    这篇文章给大家介绍怎么在C++中使用deque容器,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。deque(双端队列)是由一段一段的定量连续空间构成,可以向两端发展,因此不论在尾部或头部安插元素都十分迅速。 在中间部分...
    99+
    2023-06-15
  • 如何在 ASP 应用程序中使用 HTTP 容器?
    ASP(Active Server Pages)是一种用于创建动态网页的技术,它可以让开发人员使用 VBScript 或 JScript 等脚本语言来编写动态网页。而 HTTP 容器则是一种用于处理 HTTP 请求的软件,它可以让 ASP ...
    99+
    2023-06-03
    日志 http 容器
  • C++中的stack容器如何使用
    这篇文章主要讲解了“C++中的stack容器如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++中的stack容器如何使用”吧!stack容器1 简介① stack是一种先进后出的容...
    99+
    2023-07-05
  • C++中的map容器如何使用
    这篇“C++中的map容器如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++中的map容器如何使用”文章吧。一、m...
    99+
    2023-07-05
  • C++容器Vector如何使用
    今天小编给大家分享一下C++容器Vector如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Vector简介Vecto...
    99+
    2023-06-30
  • C++中常见容器类如何使用
    本篇内容主要讲解“C++中常见容器类如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++中常见容器类如何使用”吧!综合示例1. vector:动态数组,支持随机访问#include&nb...
    99+
    2023-07-05
  • 如何在Python应用程序中正确使用Django容器?
    Django是一个流行的Python Web框架,它可以帮助开发人员更快地构建Web应用程序。而Docker是一种容器技术,可以让开发人员更方便地部署和管理应用程序。将Django与Docker结合起来,可以让我们更轻松地管理和部署Djan...
    99+
    2023-08-24
    容器 load django
  • PHP应用程序如何在Linux容器中使用存储?
    随着云计算技术的发展,容器技术成为了云计算领域的一个热点。容器技术可以让开发者更加方便地打包和部署应用程序,并且在不同的云平台上进行迁移。Linux容器技术是目前最为流行的容器技术之一,它可以提供快速、可靠和高效的应用程序部署方式。但是,...
    99+
    2023-07-09
    linux 容器 存储
  • C++如何使用std::vector容器
    这篇文章给大家分享的是有关C++如何使用std::vector容器的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。前言vector实质是C++的一个类,与数组很相似,但是vector的优势是可以动态扩展,不需要考虑...
    99+
    2023-06-20
  • C++之list容器如何使用
    今天小编给大家分享一下C++之list容器如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、list底层结构list...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作