热门标签 | 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():返回栈内元素个数。

推荐阅读
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文介绍如何利用动态规划算法解决经典的0-1背包问题。通过具体实例和代码实现,详细解释了在给定容量的背包中选择若干物品以最大化总价值的过程。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 题目Link题目学习link1题目学习link2题目学习link3%%%受益匪浅!-----&# ... [详细]
  • 本文探讨了 C++ 中普通数组和标准库类型 vector 的初始化方法。普通数组具有固定长度,而 vector 是一种可扩展的容器,允许动态调整大小。文章详细介绍了不同初始化方式及其应用场景,并提供了代码示例以加深理解。 ... [详细]
  • 深入解析JVM垃圾收集器
    本文基于《深入理解Java虚拟机:JVM高级特性与最佳实践》第二版,详细探讨了JVM中不同类型的垃圾收集器及其工作原理。通过介绍各种垃圾收集器的特性和应用场景,帮助读者更好地理解和优化JVM内存管理。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
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社区 版权所有