C++STL的使用心得汇总(vector,string,map,list)

2023-05-16

文章目录

  • find()函数
    • vector的find
    • string的find
    • map的find
  • count()函数
    • vector的count
    • string的count
    • map的count
  • vector
  • string
  • map的各种排序方法
  • 转换相关

待完善…

find()函数

vector的find

// 寻找vec中数值10所在下标,返回10的迭代器
auto it = find(vec.begin(), vec.end(), 10); 
if (it != vec.end())  
	cout <<  it - vec.begin();  //tip: cout << *it = 10;
}

string的find

// 查找第一次出现的目标字符串substr,如果查找成功则输出查找到的第一个位置,否则返回-1
string s1 = "abcdef";
string s2 = "de";
int index = s1.find(s2) ;

int index1 = s1.find_first_of(s2);

int index1 = s1.find_last_of(s2);

map的find

// 寻找键值为1的 返回1所对应的键值对
auro it = map.find(1);
if(iter != map.end())
	cout<<iter->second<<endl;

count()函数



vector的count

一.count函数: 返回元素值为target的元素个数。

int num=count(vector1.begin(),vector2.begin(),target);   
//注意不是vector的类函数哟!!

二.count_if函数:返回符合一定条件的元素个数。compare()函数是自定义的,返回值是true就是表示符合要求。

bool compare(student a){
    return 90<a.score;
}
cout<<count_if(V.begin(),V.end(),compare)<<endl;

string的count

string s;
int num = count(s.begin(), s.end(), '1');
//注意:参数是字符而不是子串

map的count

//map中count(键值),只有1和0两种结果,用于判断其中是否有该键值对应的键值对
if(maps.count(1)==0)
    {
        cout<<"没有1这个元素"<<endl;
    }

// tip:判断其中是否有该键值对应的键值对,还可以用find方法
if(maps.find(1)==maps.end())
    {
        cout<<"没有1这个元素"<<endl;
    }

vector

tip:
如果需要高效的随机存取,而不在乎插入和删除的效率,使用vector;
如果需要大量的插入和删除,而不关心随机存取,则应使用list。”

|| vector的构造函数(初始化)

vector<T> v;   // 默认构造函数
vector(const vector &vec);  // 拷贝构造函数。
vector(v.begin(), v.end());   // 将v [begin(), end()) 区间中的元素拷贝给本身。
vector(n, elem);   // 构造函数将n个elem拷贝给本身。

|| vector的赋值

|= ”赋值:
vector& operator=(const vector& vec)

|assign赋值 --- 传入子集时使用
vector.assign(v'.begin(), v'.end()// 将v [begin(), end()) 区间中的元素拷贝给本身
vector.assign(10, 100)  // 重复次数和重复字符

|| vector的容量和大小

empty()   --// 判空返回true或false
size()	--//返回容器长度(元素个数)

|| vector的插入和删除

push_back(elem) 
pop_back()
insert(const_iterator pos, int count = 1, elemtype elem)  
//在迭代器指向的位置插入count个elem 注意:必须使用迭代器指明位置,插入个数不指明时为1
erase(const_iterator pos)    // 删除迭代器指定位置的元素
erase(const_iterator pos_start, const_iterator pos_end) // 删除迭代器指定位置间的所有元素
clear()

|| vector的读取

[ ]读取 // 
at读取
front()
back()

|| vector 转为数组

// 简单移动
 int arr[n];
 for(int i=0; i<n; i++){
   arr[i] = vec[i];
 }
//copy函数
int arr[input.size()];
copy(vec.begin(), vec.end(), arr);

string

|| 容器string内部封装的是一个类,其中封装的成员函数操作对象可以是string类,也可以是char型字符串

|| string类的构造函数 :(初始化)

string()默认构造
string  s2(const char * str) // string s2 (s1)    -- 拷贝构造(拷贝字符串或拷贝string)
string(int a, char b) 使用a个b初始化string

|| string的赋值操作

//1,“ = ”赋值 
//2,assign赋值 (可以传入子串,和自定义重复串)
string & assign (const char * s) / (const char * s, int a)//---将s或s前a个字符赋值给string 	
string & assign(const string & s) / (const string & s, int a)// ---将s或s除前a个字符后的所有字符值给string
string & assign(int a, char ‘c’)     // --- 将a个字符c 赋值给string

|| string的拼接 (拼接指的是拼到末尾)

//1,“ += ”拼接:
string& operator+=(const string & s) 
//2,append赋值:
string& append (const char * s) / (const char * s, int n) //将char型字符串或其前n个字符拼接在s末尾
string& append(const string & s) / (const string & s, int start, int end) //将string或string的start end范围内的子串拼接在s末尾

|| string的替换

string& replace(int pos,int num,const string& s) / (int  pos, int num, const char* s)//---替换从pos位置开始的num个字符为s

|| string的比较(比较原理:逐个比较字符的ASCll码)

int compare(const string& s) / (const char * s) ---= 则返回0(若>返回1,若<返回-1

|| string的读写

1,“ [ ] ” 读取:
2,at 读取:

|| string的插入和删除 (插个话:替换的本质就是删除加插入)

//1,插入:
string& insert(int pos, const char* s) / (int pos, const string &s)
string& insert(int pos, int a , char c)
//2, 删除:
string& erase(int pos, int a) --- 删除从pos开始的a个字符

|| string的子串

string& substr(int pos = 0, int npos = s.size() - pos) 
//(pos的默认值是0,n的默认值是s.size() - pos)
//当有两个参数时:截取pos - npos的子串
//当不带参数时:默认拷贝整个s
//当只带一个参数时:此参数为头,默认第二个参数为字符串末尾

map的各种排序方法

1、key从大到小

map<string, int, greater<int>> hash;

2、特殊规则排序

bool compare(string a, string b){
	return a.size() < b.size();
}

map<string, int, compare()> hash;

3、按value排序

map中key不允许重复,而multimap允许key重复。通过将map中的key和value对调存储到multimap中,就可以实现对map按值排序了。

map<char,int> cnt;
multimap<int,char>_cnt;
for(map<char,int>::iterator itr = cnt.begin();itr!=cnt.end();itr++){
	_cnt.insert(pair<int,char>(itr->second,itr->first));
}

转换相关

string --> char*
char* --> string

int --> char
char --> int

int[] --> string
string --> int[]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++STL的使用心得汇总(vector,string,map,list) 的相关文章

  • PHP Soap Server:使用字符串(xml 字符串)而不是 WSDL 文件(指向它的 url)实例化

    Soap Server的PHP页面 我见过 http www php net manual en soapserver soapserver php http www php net manual en soapserver soapser
  • 在 boost 元组、zip_iterator 等上使用 std::get 和 std::tie

    我有哪些使用选择std get lt gt and std tie lt gt 与增强结构一起 例子 我想使用基于范围的 for 循环在多个容器上进行迭代 我可以实施zip函数 它使用boost zip iterator include
  • 为什么 Haskell 的默认字符串实现是一个字符链接列表?

    Haskell 默认值的事实String众所周知 实现在速度和内存方面都效率不高 据我所知 lists一般来说 在 Haskell 中实现为单链表 并且适用于大多数小型 简单数据类型 例如Int 这似乎不是一个好主意 但是对于String这
  • 在Python中创建N*N*N列表时出现问题

    我正在尝试创建一个 3 维 NNPython 中的 N 列表 如下所示 n 3 l 0 n n n 不幸的是 这似乎没有正确地 克隆 列表 正如我所想的那样 gt gt gt l 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  • Java 阻止列表实现

    我在 SO 和 Google 上搜索了这个问题的答案 但到目前为止找不到合适的解决方案 我目前正在研究图形路由问题中的 LayerManager 管理器负责提供和重置一组固定的层 我想使用阻止列表来实现消费者 生产者模式 以便只要没有可用的
  • 如何查找给定字符串中仅出现一次的第一个字符[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何使用 PHP 以任意顺序进行字符搜索(12 个字母,其中 6 个字母构成一个单词)?

    我整天都在想这个问题 似乎无法找出一种记忆有效且快速的方法 问题是 例如 我有这些信 e f j l n rr t t u w x 12 个字母 我正在找这个词 海龟 6 个字母 如何使用 php 找到完整范围 12 个单词 中所有可能的单
  • 根据 Mathematica 中的另一个列表值拆分列表

    在 Mathematica 中我有一个点坐标列表 size 50 points Table RandomInteger 0 size RandomInteger 0 size i 1 n 以及这些点所属的聚类索引列表 clusterIndi
  • 使用 Linq 返回具有最大计数的列表

    使用 C 和 Linq 如何返回具有最大大小 计数的 List 我假设您有一个名为的列表集合lists并且您想要返回此集合中元素最多的列表 如果是这样 请尝试以下操作 var listWithLargestCount lists Order
  • 为什么 as.character() 返回日期列表中的整数?

    我惊讶地发现 R 中出现以下行为 as character c Sys Date gt 1 2018 02 05 as character list Sys Date gt 1 17567 为什么会出现这种情况 也就是说 显然 17567
  • 以点作为分隔符分割字符串

    我想知道我是否要在一个字符串上分割字符串 正确的方式 我的代码是 String fn filename split return fn 0 我只需要字符串的第一部分 这就是我返回第一项的原因 我问这个是因为我在 API 中注意到 意味着任何
  • 如何在 C# 中使用窗口窗体创建动态下拉列表

    我正在尝试为朋友的手机商店构建一个简单的库存程序 我想使用C 并访问数据库来存储数据 DB 将有 2 个主要列表 devices 品牌 型号 颜色 价格 库存 最小库存 parts 品牌 型号 描述 库存 最小库存 GUI 将使用多个下拉列
  • 如何在 C++ 中对静态缓冲区执行字符串格式化?

    我正在处理一段对性能要求非常高的代码 我需要执行一些格式化的字符串操作 但我试图避免内存分配 甚至是内部库的内存分配 在过去 我会做类似以下的事情 假设是 C 11 constexpr int BUFFER SIZE 200 char bu
  • Python-使用元组作为列表索引[重复]

    这个问题在这里已经有答案了 我有一个元组列表 tuples list 1 0 2 3 3 2 2 0 我想访问二维数组的元素a例如 使用其中一些元组 for i in range 3 print a tuples list i 应该输出的值
  • 在python中组合2个列表

    我有 2 个列表 每个列表大小相同 并且有兴趣将这两个列表组合起来并将其写入文件中 alist 1 2 3 5 blist 2 3 4 5 结果列表应该是这样的 1 2 2 3 3 4 5 5 之后我希望将其写入文件 我怎样才能做到这一点
  • 当我尝试从列表中删除元素时,如何忽略 ValueError?

    如果我打电话 如何忽略 不在列表中 错误消息a remove x when x不在列表中a 这是我的情况 gt gt gt a range 10 gt gt gt a 0 1 2 3 4 5 6 7 8 9 gt gt gt a remov
  • strlen - 字符串的长度有时会增加 1

    我正在做一些 C 智力题 在大多数情况下 我能够找到正确的答案 但我遇到了问题 我通过使用编译器知道正确的答案 但我不知道原因 看一下代码 char c abc 012 0x34 什么会strlen c 返回 使用标准 C 编译器 我的编译
  • 关于C字符串的问题

    我是 C 语言新手 对 C 字符串非常困惑 以下是我的问题 从字符串中查找最后一个字符 如何找出字符串中的最后一个字符 我带着类似的东西来 char str hello printf c str strlen str 1 return 0
  • Python range() 和 zip() 对象类型

    我了解功能如何range and zip 可以在 for 循环中使用 然而我期望range 输出一个列表 很像seq在 Unix shell 中 如果我运行以下代码 a range 10 print a 输出是range 10 表明它不是一
  • 尝试将元素推入向量

    在头文件 我没有编写 中 已经定义了一个结构体 如下所示 struct MemoryMessage public boost counted base public FastAlloc explicit MemoryMessage Memo

随机推荐

  • Linux内核中的各种锁

    Linux内核中的各种锁 在现代操作系统里 xff0c 同一时间可能有多个内核执行流在执行 xff0c 因此内核其实象多进程多线程编程一样也需要一些同步机制来同步各执行单元对共享数据的访问 尤其是在多处理器系统上 xff0c 更需要一些同步
  • Linux进程间通信方式

    进程与进程通信的概念进程通信的应用场景进程通信的几种方式 管道 管道简介管道原理 管道如何通信管道如何创建管道读写实现 管道api与用法 普通管道流管道命名管道 实现原理api与应用 匿名管道和有名管道总结 信号 信号来源信号生命周期和处理
  • C语言字节对齐问题详解

    引言 考虑下面的结构体定义 xff1a span class hljs keyword typedef span span class hljs keyword struct span span class hljs built in ch
  • git使用

    git使用 git clone时报如下错误 原因解决方法 TortoiseGit clone时报错 问题原因解决方法 git log使用git回归代码 git使用 本文记录的是工作中git是使用问题 xff0c 无脑模式 xff0c 遇到什
  • 内存对齐算法

    字节对齐是在分配内存时需要考虑的问题 xff0c 两个小算法 xff1a 1 最容易想到的算法 unsigned int calc align unsigned int n unsigned align if n align align 6
  • vscode快捷键整理

    1 注释 xff08 1 xff09 方式 注释 取消注释 xff1a Ctrl 43 xff08 2 xff09 方式 注释 xff1a Ctrl 43 Shift 43 取消注释 xff1a Ctrl 43 Shift 43 2 代码排
  • Qt之实现移动的方块(蚂蚁线)

    一 简介 移动的小方块或者说是类似移动的蚂蚁线 xff0c 从一篇文章看到的 xff0c 挺有趣的就自己做了一个 xff0c 可以自由添加方块的个数 xff0c 起始位置 xff0c 方块的宽度 xff0c 方块移动速度等待参数 xff0c
  • Docker 突然挂掉 failed to create shim task: OCI runtime create failed: container_linux.go:345: ...

    目录 问题描述 xff1a 参考 解决方案 最佳方案 xff1a 问题描述 xff1a docker Error response from daemon failed to create shim task OCI runtime cre
  • Qt之事件过滤器(eventFilter)详解

    1 2 1 Qt中事件是如何进行传递 1 2 2 Qt中的事件过滤器 xff08 eventFilter xff09 1 2 3 如何自己模拟发送事件消息 一 Qt中事件过滤器详解 我们先看下另外两个相关的方法 xff0c 一个是给对象安装
  • Qt实现微信截图功能(一)

    简述 Qt 之 简单截图功能 xff08 一 xff09 实现鼠标选中区域截图Qt 之 简单截图功能 xff08 二 xff09 实现可移动选中区域Qt 之 简单截图功能 xff08 三 xff09 实现可拖拽选中区域 在之前的文章中有带大
  • Qt之QMenu菜单去除投影效果(阴影)

    一 简述 我们使用Qt中的菜单 xff0c 正常情况下样式是跟随当前系统菜单的样式 xff0c 我们可以使用样式表进行修饰 xff0c 改变原有风格 xff0c 但是window系统上菜单边框四周会附带阴影的效果 xff0c 样式是无法取消
  • Qt 之 设置窗口边框的圆角

    Qt技术学习班开始了 xff0c 更多精彩 好玩的内容等着你 xff0c 赶紧报名吧 群号 xff1a 655815739 Qt在设置窗口边框圆角时有两种方式 xff0c 一种是设置样式 xff0c 另一种是在paintEvent事件中绘制
  • Qt 之 HTTP 请求下载(支持断点续传)

    简述 最近在研究了一下用Qt 的方法来实现http下载 xff0c Qt 中的Http请求主要用到了QNetworkAccessManager QNetworkReply QNetworkRequest 这三块 本篇文章主要叙述如何用Qt
  • Qt之实现录音播放及raw(pcm)转wav格式

    简述 在上一篇 Qt 之 WAV文件解析 中详细地分析了wav格式文件的文件头信息 通过QAudioInput实现录音功能 xff0c 但是录音生成的文件并不能用播放器打开 xff0c 就算更改后缀名也无法识别 xff08 有时候下载的一些
  • C++中 Unicode 与 UTF-8 编码互转

    1 简述 最近在发送网络请求时遇到了中文字符乱码的问题 xff0c 在代码中调试字符正常 xff0c 用抓包工具抓的包中文字符显示正常 xff0c 就是发送到服务器就显示乱码了 xff0c 那就要将客户端和服务器设置统一的编码 xff08
  • Qt 之 自定义按钮 在鼠标 悬浮、按下、松开后的效果

    Qt技术学习班开始了 xff0c 更多精彩 好玩的内容等着你 xff0c 赶紧报名吧 群号 xff1a 655815739 一 简述 在上一篇 Qt 之 去除窗口部件被选中后的焦点虚线框 中 xff0c 我们为了去除焦点虚线框 xff0c
  • Qt 之 自定义窗口标题栏

    Qt训练营开始了 xff0c 更多精彩 好玩的内容等着你 xff0c 赶紧报名吧 群号 xff1a 861353824 一 简述 今天晚上就如何用Qt自定义窗口标题栏 xff0c 写了一个小例子 xff0c 比较基础 xff0c 实用 在此
  • Qt 之 模仿 QQ登陆界面——旋转窗口篇

    一 简述 今天是新的一年第一篇博客 xff0c 有大半个月没有更新博客了 我想是时候 xff0c 打开电脑 拿起键盘 开始在我的代码之路上披荆斩棘 xff0c 斩杀恶龙 今天就继续来分享QQ登录界面的那些事 QQ登录界面的标题栏有一个小三角
  • Ubuntu配置无线路由器笔记记录

    参考文章 xff1a linux 开启制作无线路由器 ubuntu 1404 linux zhu的博客 CSDN博客 hostapd实现WIFI 热点 xff08 AP xff09 自由枫 的博客 CSDN博客 hostapd 终端get一
  • C++STL的使用心得汇总(vector,string,map,list)

    文章目录 find 函数vector的findstring的findmap的find count 函数vector的countstring的countmap的count vectorstringmap的各种排序方法转换相关 待完善 find