热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C++STL库学习——容器

在我刚走上算法修炼这条路时,走了不少的弯路,那时候因为不知道CSTL库的存在,为了满足题目对运行时间的要求,只能使用C语言&

在我刚走上算法修炼这条路时,走了不少的弯路,那时候因为不知道C++ STL库的存在,为了满足题目对运行时间的要求,只能使用C语言,而C语言最大的弊端是很多东西都要自己去实现,所以在做算法题时,我常常会感觉到很累,一度想要放弃。

但自从用上了STL库以后,情况改善了许多,STL即标准模板库,它提供了多种容器和算法来满足编程者的要求,本篇文章不做教程,因为好的教程太多了,这里推荐C语言中文网:http://c.biancheng.net/cplus/80/,花上两个小时就可以完全学会!


关于vector的一些简单总结:

适用场景:

vector:在元素个数不确定时做变长数组;再输出元素个数不确定而又需要每个元素之间打印空格时,做暂存容器!

vector数组:存储树,图!

 

头文件:

#include

 

定义:

vector name;


例如:

vector name;

vector name;

vector name;//node为结构体的类型

vector > name;   // >>之间要加空客


访问:

迭代器定义方式:

vector:: iterator it;

类似于指针,注意左闭右开!

 

常用函数:

push_back():末尾添加元素

pop_back():删除末尾元素

size():返回vector长度

clear():清空vector里面的所有元素

insert(it,x):用来向任意的迭代器it处插入一个元素x。

erase():删除单个元素,或某个区间的所有元素。

 


关于set的一些简单总结:

适用场景:

set:需要去重但是不方便直接开数组的情况可使用set,set可实现自动去重并按升序排序。

set中元素唯一,如果需要处理不唯一的情况,则需要使用multiset

头文件:

#include

定义:

与vector相同,不再赘述。

访问:

set只能通过迭代器访问:set::iterator it;

除vector和string之外的STL容器都不支持*(it+i)的访问方式,因此set的枚举方式唯一:

#include
#includeusing namespace std;
int main()
{set st;st.insert(1);st.insert(3);st.insert(5);st.insert(7);st.insert(1);//不支持 it ::iterator it=st.begin(); it!=st.end(); it++){printf("%d",*it);}return 0;}

 

常用函数:

insert(x) : 将x插入set容器中。

find(value) : 返回set中对应值为value的迭代器。

erase() :  删除单个元素,或某个区间的所有元素。

size() :返回set内元素的个数。

clear() : 清空set中的所有元素。

 


关于string的一些简单总结:

适用场景:替代字符数组char str[]来存放字符串,封装了一些常用功能,方便操作!

头文件:

#include

定义:

string str;

访问:

#include
#include
using namespace std;
int main()
{string str="asdfg";for(int i=0;i>str;//输入输出只能用cin cout cout<

也可以用迭代器访问,用法同set,此处不赘述!

常用函数:


  1. 字符串拼接:str3=str1+str2
  2. 比较操作:按字典序比较大小。
  3. length()/size():湖区存放的字符数
  4. insert():

    insert(pos,string):在pos号位置插入字符串string
    insert(it,it2,it3):it为原字符串中欲插入的位置,it2和it3为待插入的字符串的首尾迭代器。

  5. erase():删除某个字符或一段字符。

  6. clear():清空字符串!

  7. sub(pos,len)返回从pos号位开始、长度为len的子串。

  8. find(str2):当str2是str的子串时,返回其在str中第一次出现额位置;如果str2不是str的子串,返回string::npos。

  9. replace(pos,len,str2):把str从pos号位开始、长度为len的子串替换为str2。

 


关于map的一些简单总结:

适用场景:

map翻译为映射,也是STL容器。map可以将任何基本类型(包括STL容器)映射到任何基本类型(包括STL容器)。

例:可建立字符串到数字的映射、字符串到字符串的映射。

头文件:

#include

定义:

mapmp;

typename1为映射前的类型(键key),typename2为映射后的类型(值value).

访问:

1.下标访问:例value=map[key]

2.迭代器访问:mapiterator it;

常用函数:

1.find(key):返回键为key的映射的迭代器.

2.erase():删除某个元素或者某个区间的所有的元素。

3.size():返回map中映射的对数。

4.clear():清空map中的所有元素

 


关于queue的一些简单总结:

适用场景:建立一种先进先出的数据结构。可用于广度优先搜索时(BFS)

头文件:

#include

定义:

queue name;

访问:

front():访问队首元素。

back():访问队尾元素。

常用函数:


  1. push(x):将x入队。
  2. front(),back():分别获得队首元素和队尾元素。
  3. pop():令队首元素出队。
  4. empty():检测queue是否为空,是则返回true,否则返回false。
  5. size():返回queue内的元素的个数。

 


关于stack的一些简单总结:

适用场景:

实现一种先入后出的数据结构,可用来模拟实现一些递归。

头文件:

#include

定义:

stack name;

常用函数:


  1. push(x):将x入栈。
  2. top():获得栈顶元素。
  3. pop():用以弹出栈顶元素。
  4. empty():判断是否为空。
  5. size():返回栈内元素个数。

推荐阅读
  • STL迭代器的种类及其功能介绍
    本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ... [详细]
  • 本文介绍了在Windows系统上使用C语言命令行参数启动程序并传递参数的方法,包括接收参数程序的代码和bat文件的编写方法,同时给出了程序运行的结果。 ... [详细]
  • C语言判断正整数能否被整除的程序
    本文介绍了使用C语言编写的判断正整数能否被整除的程序,包括输入一个三位正整数,判断是否能被3整除且至少包含数字3的方法。同时还介绍了使用qsort函数进行快速排序的算法。 ... [详细]
  • 本文介绍了GTK+中的GObject对象系统,该系统是基于GLib和C语言完成的面向对象的框架,提供了灵活、可扩展且易于映射到其他语言的特性。其中最重要的是GType,它是GLib运行时类型认证和管理系统的基础,通过注册和管理基本数据类型、用户定义对象和界面类型来实现对象的继承。文章详细解释了GObject系统中对象的三个部分:唯一的ID标识、类结构和实例结构。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
  • C语言常量与变量的深入理解及其影响
    本文深入讲解了C语言中常量与变量的概念及其深入实质,强调了对常量和变量的理解对于学习指针等后续内容的重要性。详细介绍了常量的分类和特点,以及变量的定义和分类。同时指出了常量和变量在程序中的作用及其对内存空间的影响,类似于const关键字的只读属性。此外,还提及了常量和变量在实际应用中可能出现的问题,如段错误和野指针。 ... [详细]
  • C++语言入门:数组的基本知识和应用领域
    本文介绍了C++语言的基本知识和应用领域,包括C++语言与Python语言的区别、C++语言的结构化特点、关键字和控制语句的使用、运算符的种类和表达式的灵活性、各种数据类型的运算以及指针概念的引入。同时,还探讨了C++语言在代码效率方面的优势和与汇编语言的比较。对于想要学习C++语言的初学者来说,本文提供了一个简洁而全面的入门指南。 ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
author-avatar
月亮哥哥是团宠他男人
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有