c++学习:STL库(框架)+字符串模板类string+vector容器+list链表
目录
stl库
常用组件包括
字符串库 字符串模板类string
头文件
最常用的字符串模板类
字符串类型
模板原型
模板的成员数据类型
模板成员函数
有些函数会有重载,可以去下面网址查看std::basic_string - cppreference.comhttps://zh.cppreference.com/w/cpp/string/basic_string
定义字符串模板对象
字符串实战 部分成员函数和非成员函数
vector容器 动态数组类模板
头文件
模板原型
模板的成员数据类型和成员函数
定义动态数组类模板对象
容器实战
简单的学生管理系统
list双向链表
头文件
模板原型
模板得成员数据类型和成员函数
实战
stl库
STL是指标准模板库,提供了通用的模板类和函数,可以实现多种流行和常用的算法和数据结构,例如字符串操作,链表,队列等等
常用组件包括
- 容器(顺序容器,关联容器)
- 例如数组,链表,栈,二叉树等等
- 算法
- 作用于容器,提供操作方法,初始化,排序,搜索,转换等等
- 迭代器
- 遍历对象集合的元素,类似指针
字符串库 字符串模板类string
头文件
#include <string>
最常用的字符串模板类
- std::basic_string
- 为操作任何字符串类型的字符串设计的模板类
字符串类型
- 类型 定义
- std::string std::basic_string<char>
- std::wstring std::basic_string<wchar_t>
- std::u8string (C++20 起) std::basic_string<char8_t>
- std::u16string (C++11 起) std::basic_string<char16_t>
- std::u32string (C++11 起) std::basic_string<char32_t>
模板原型
template<class CharT,//字符串类型class Traits = std::char_traits<CharT>,//指定字符串类型上操作的特性类class Allocator = std::allocator<CharT>//用于分配内存存储的分配器类型
>class basic_string;
模板的成员数据类型
成员类型 | 定义 | ||||
traits_type | Traits | ||||
value_type | CharT | ||||
allocator_type | Allocator | ||||
size_type |
| ||||
difference_type |
| ||||
reference | value_type& | ||||
const_reference | const value_type& | ||||
pointer |
| ||||
const_pointer |
| ||||
iterator |
| ||||
const_iterator |
| ||||
reverse_iterator | std::reverse_iterator<iterator> | ||||
const_reverse_iterator | std::reverse_iterator<const_iterator> |
模板成员函数
成员函数
(构造函数) 构造 basic_string(公开成员函数)
(析构函数) 销毁字符串,在使用内部存储时解分配它(公开成员函数)
operator= 为字符串赋值(公开成员函数)
assign 赋值字符给字符串(公开成员函数)
assign_range 赋值范围内的字符到字符串(公开成员函数)
get_allocator 返回关联的分配器(公开成员函数)元素访问
at 访问指定字符,有边界检查(公开成员函数)
operator[] 访问指定字符(公开成员函数)
front 访问首字符(公开成员函数)
back 访问最后的字符(公开成员函数)
data 返回指向字符串首字符的指针(公开成员函数)
c_str 返回字符串的不可修改的 C 字符数组版本(公开成员函数)
operator basic_string_view 返回到整个字符串的不可修改的 basic_string_view(公开成员函数)迭代器
begin、cbegin 返回指向起始的迭代器(公开成员函数)
end、cend 返回指向末尾的迭代器(公开成员函数)
rbegin、crbegin 返回指向起始的逆向迭代器(公开成员函数)
rend、crend 返回指向末尾的逆向迭代器(公开成员函数)容量
empty 检查字符串是否为空(公开成员函数)
size、length 返回字符数(公开成员函数)
max_size 返回字符数的最大值(公开成员函数)
reserve 保留存储(公开成员函数)
capacity 返回当前对象分配的存储空间能保存的字符数量(公开成员函数)
shrink_to_fit 通过释放不使用内存减少内存使用(公开成员函数)操作
clear 清除内容(公开成员函数)
insert 插入字符(公开成员函数)
insert_range 插入范围内的字符(公开成员函数)
erase 移除字符(公开成员函数)
push_back 后附字符到结尾(公开成员函数)
pop_back 移除末尾字符(公开成员函数)
append 后附字符到结尾(公开成员函数)
append_range 后附范围内的字符到结尾(公开成员函数)
operator+= 后附字符到结尾(公开成员函数)
compare 比较二个字符串(公开成员函数)
starts_with 检查字符串是否始于给定前缀(公开成员函数)
ends_with 检查字符串是否终于给定后缀(公开成员函数)
contains 检查字符串是否含有给定的子串或字符(公开成员函数)
replace 替换字符串的指定部分(公开成员函数)
replace_with_range 以范围中的字符替换字符串的指定部分(公开成员函数)
substr 返回子串(公开成员函数)
copy 复制字符(公开成员函数)
resize 更改存储的字符数(公开成员函数)
resize_and_overwrite 更改存储的字符数并可能经由用户提供的操作重写不确定的内容(公开成员函数)
swap 交换内容(公开成员函数)查找
find 于字符串中寻找字符(公开成员函数)
rfind 寻找子串的最后一次出现(公开成员函数)
find_first_of 寻找字符的首次出现(公开成员函数)
find_first_not_of 寻找字符的首次缺失(公开成员函数)
find_last_of 寻找字符的最后一次出现(公开成员函数)
find_last_not_of 寻找字符的最后一次缺失(公开成员函数)
有些函数会有重载,可以去下面网址查看std::basic_string - cppreference.comhttps://zh.cppreference.com/w/cpp/string/basic_string
定义字符串模板对象
#include <string>using namespace std;int main()
{//实例化一个STL库中的字符串类模板的对象std::basic_string<char> s1;basic_string<char> s2;std::string s3;string s4;
}
上面的s1,s2,s3,s4定义其实都是一样的,c++为了方便,将std::basic_string<char>另起名为std::string
typedef std::basic_string<char> std::string;
字符串实战 部分成员函数和非成员函数
#include <iostream>
#include <string>using namespace std;int main()
{//实例化一个STL库中的字符串类模板的对象std::basic_string<char> s1;basic_string<char> s2;std::string s3;string s4;//构造string s5("hello world");//赋值重载=s4 = s5;//元素访问,返回引用cout<<s4.at(1)<<endl;s4.at(0) = 'x';//赋值重载[]s4[2] = 'p';//赋值重载<<cout<<s4<<endl;//data返回的是 string转化为的const char*指针//返回指向字符串首字符的指针cout<<"s5:"<<s5.data()<<endl;//返回字符串的不可修改的 C 字符数组版本cout<<"s5:"<<s5.c_str()<<endl;//通过迭代器 遍历 容器中的每个元素//begin返回字符串首字符的迭代器 数据类型是iterator //end返回字符串最后字符的迭代器 数据类型是iterator //iterator在类模板里 正常写法是std::basic_string<char>::iterator for(string::iterator it=s5.begin();it!=s5.end() ;it++){cout<<*it<<endl;}//容量//判断是否为空,返回blue类型string s6;if(s6.empty()){cout<<"s6.empty"<<endl;}//capacity返回当前这个对象里面的指针成员 指向的堆空间,能够容纳存储多少个字符cout<<s6.capacity()<<endl;//size、length当前这个对象中有效的字符串的长度cout<<"size:"<<s6.size()<<endl;cout<<"length:"<<s6.length()<<endl;//插入操作string s77("nihao");s77.insert(2,1,'a');cout<<s77<<endl;//niahao//尾插法//nihao---->nihao,zaime//push_back只能插一个字符string s7("nihao");s7.push_back(',');s7.push_back('z');s7.push_back('a');s7.push_back('i');s7.push_back('m');s7.push_back('e');cout<<s7<<endl;//尾部删除删除s7.pop_back();cout<<s7<<endl;//append追加string s8("hello");s8.append(" world");cout<<s8<<endl;//赋值重载+=s8 += "123456";cout<<s8<<endl;//返回子串//要求 将 s8("hello world123456")-->将world返回来cout<<s8.substr(6,5)<<endl;//查找string s9("abc123456efg");//想要在上面的字符串中查找 是否存在123456int ret = s9.find("www");//如果找到了,则返回 子串的起始位置 int ,没有找到返回 -1cout<<ret<<endl;//以下是类的 非成员函数 ,不能通过对象进行调用string s10("hello");if(s10 == "hello") //等同于调用operator==(s10,"hello"){}string s11("123456");//将string 转换成 intint val = std::stoi(s11);//将整型 100转换成 stringint data = 100;string s12 = std::to_string(data);cout<<s12<<endl;return 0;
}
vector容器 动态数组类模板
std::vector是封装动态数组的顺序容器,简单来说就是动态数组类模板
头文件
#include<vector>
模板原型
template<class T,//元素的类型class Allocator = std::allocator<T>//用于获取/释放内存及构造/析构内存中元素的分配器
> class vector;
模板的成员数据类型和成员函数
std::vector - cppreference.comhttps://zh.cppreference.com/w/cpp/container/vector
定义动态数组类模板对象
std::vector<int> v1(10);
容器实战
#include <iostream>
#include <vector>using namespace std;//ostream& operator<<(ostream&out, std::vector<int> &ra)
//{
// for(int i=0; i<ra.size(); i++)
// {
// out<<ra.at(i)<<"\t";
// }
//}int main()
{//实例化一个STL库中的动态数组类模板的对象//注意:如果实例化vector类对象的时候,没有指定元素的个数//那么,容器里面默认的大小为0,也就是没有空间std::vector<int> v1(10);for(int i=0; i<10; i++){//v1.at(i) = i+100;v1[i] = i+10;}//编译器 会转换 成 运算符函数 operator<<(cout,v1)需要自己定义//cout<<v1<<endl; //返回首元素指针int *arr = v1.data();//通过迭代器遍历容器//正向迭代器 需要将运算符函数 operator<<注释掉,要不然测不出来std::vector<int>::iterator it;for(it=v1.begin(); it!=v1.end(); it++){cout<<*it<<"\t";}cout<<endl;//反向迭代器遍历容器std::vector<int>::reverse_iterator rit;for(rit = v1.rbegin(); rit!=v1.rend(); rit++){cout<<*rit<<"\t";}cout<<endl;//尾插 并且 会给你进行扩容v1.push_back(1000);//遍历查看for(it=v1.begin(); it!=v1.end(); it++){cout<<*it<<"\t";}cout<<endl;return 0;
}
简单的学生管理系统
#include <iostream>
#include <vector>using namespace std;struct Student{string name;int age;float score;
};int main()
{std::vector<struct Student> v;struct Student s1 = {"zhang3",22,100};v.push_back(s1);struct Student s2 = {"zhang4",22,100};v.push_back(s2);struct Student s3 = {"zhang5",22,100};v.push_back(s3);for(std::vector<struct Student>::iterator it=v.begin(); it!=v.end(); it++){cout<<"name:"<<it->name<<" age:"<<it->age<<" score:"<<it->score<<endl;}return 0;
}
list双向链表
头文件
#include<list>
模板原型
template<class T,//元素的类型class Allocator = std::allocator<T>//用于获取/释放内存及构造/析构内存中元素的分配器
> class list;
模板得成员数据类型和成员函数
std::list - cppreference.comhttps://zh.cppreference.com/w/cpp/container/list
实战
#include <iostream>
#include <list>using namespace std;class Student
{
public:Student(string n,int a,float s):name(n),age(a),score(s){}void show(){cout<<name<<"\t"<<age<<"\t"<<score<<endl;}
private:string name;int age;float score;
};int main()
{//实例化一个双向链表容器的对象std::list<int> list1;//尾插list1.push_back(10);list1.push_back(20);list1.push_back(30);list1.push_back(40);list1.push_back(50);// 使用[]+ 下标的方式 访问 容器,一般来说,这个容器的每个元素的内存空间一定是连续的// int arr[3]; arr[2]等同于*(arr+2)//list1[0] = 1000; 错误 ,链表的内存空间不是连续的,不能使用 [ ]//迭代器遍历std::list<int>::iterator it;for(it=list1.begin(); it!=list1.end(); it++){cout<<*it<<"\t";}cout<<endl;//学生信息std::list<Student> list;list.push_back(Student("zhang3",22,100));list.push_back(Student("zhang4",25,100));list.push_back(Student("zhang5",26,100));list.push_back(Student("zhang6",27,100));std::list<Student>::iterator it;for(it=list.begin(); it!=list.end(); it++){it->show();}return 0;
}
相关文章:
c++学习:STL库(框架)+字符串模板类string+vector容器+list链表
目录 stl库 常用组件包括 字符串库 字符串模板类string 头文件 最常用的字符串模板类 字符串类型 模板原型 模板的成员数据类型 模板成员函数 有些函数会有重载,可以去下面网址查看std::basic_string - cppreference.comhttps://zh.cppreference.com/w/cp…...
2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷④
2023年全国职业院校技能大赛(高职组) “云计算应用”赛项赛卷4 目录 需要竞赛软件包环境以及备赛资源可私信博主!!! 2023年全国职业院校技能大赛(高职组) “云计算应用”赛项赛卷4 模块一 …...
使用Scikit Learn 进行识别手写数字
使用Scikit Learn 进行识别手写数字 作者:i阿极 作者简介:数据分析领域优质创作者、多项比赛获奖者:博主个人首页 😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏…...
GB/T 15036-2018 实木地板检测
实木地板是指未经拼接、覆贴的单块木材直接加工而成的地板,实木地板具有脚感舒适,环保等优良的性能,在家庭装修中被广泛使用,尤其是在国内很受欢迎。 GB/T 15036-2018 实木地板测试介绍: 测试项目 测试方法 外观 G…...
基于ElementUI封装的下拉树选择可搜索单选多选清空功能
效果: 组件代码 /*** 树形下拉选择组件,下拉框展示树形结构,提供选择某节点功能,方便其他模块调用* author wy* date 2024-01-03 * 调用示例:* <tree-select * :height"400" // 下拉框中树形高度* …...
计算机网络-各层协议
大家在搞嵌入式开发的时候基本都了解过七层网络协议、五层网络协议、四层网络协议,那么今天让我们更加的深入了解一下: 历史发展介绍 OSI七层模型由ISO国际标准化组织提出的通信标准。TCP/IP四层模型是OSI七层模型的简化版,OSI在它被官方完…...
LeetCode 84:柱状图中的最大矩形
一、题目描述 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 示例 1: 输入:heights [2,1,5,6,2,3] 输出:10 解释:…...
老生重谈:大模型的「幻觉」问题
一、什么是大模型「幻觉」 大模型的幻觉问题通常指的是模型在处理输入时可能会产生一些看似合理但实际上是错误的输出,这可能是因为模型在训练时过度拟合了训练数据,导致对噪声或特定样本的过度敏感。 "大数据幻觉"指的是在处理大规模数据时…...
golang实现skiplist 跳表
跳表 package mainimport ("errors""math""math/rand" )func main() {// 双向链表///**先理解查找过程Level 3: 1 6Level 2: 1 3 6Level 1: 1 2 3 4 6比如 查找2 ; 从高层往下找;如果查找的值比当前值小 说明没有可查找的值2比1大 往当前…...
尝试OmniverseFarm的最基础操作
目标 尝试OmniverseFarm的最基础操作。本地机器作为Queue和Agent,同时在本地提交任务。 主要参考了官方文档: Farm Queue — Omniverse Farm latest documentation Farm Agent — Omniverse Farm latest documentation Farm Examples — Omniverse Far…...
第28关 k8s监控实战之Prometheus(二)
------> 课程视频同步分享在今日头条和B站 大家好,我是博哥爱运维。 这节课我们用prometheus-operator来安装整套prometheus服务 https://github.com/prometheus-operator/kube-prometheus/releases 开始安装 1. 解压下载的代码包 wget https://github.com/…...
基于 SpringBoot + magic-api + Vue3 + Element Plus + amis3.0 快速开发管理系统
Tansci-Boot 基于 SpringBoot2 magic-api Vue3 Element Plus amis3.0 快速开发管理系统 Tansci-Boot 是一个前后端分离后台管理系统, 前端集成 amis 低代码前端框架,后端集成 magic-api 的接口快速开发框架。包含基础权限、安全认证、以及常用的一…...
Kafka(四)Broker
目录 1 配置Broker1.1 Broker的配置broker.id0listererszookeeper.connectlog.dirslog.dir/tmp/kafka-logsnum.recovery.threads.per.data.dir1auto.create.topics.enabletrueauto.leader.rebalance.enabletrue, leader.imbalance.check.interval.seconds300, leader.imbalance…...
代码随想录第五十二天——最长递增子序列,最长连续递增序列,最长重复子数组
leetcode 300. 最长递增子序列 题目链接:最长递增子序列 dp数组及下标的含义 dp[i]表示i之前包括i的以nums[i]结尾的最长递增子序列的长度递推公式 位置i的最长升序子序列等于j从0到i-1各个位置的最长升序子序列 1 的最大值 所以if (nums[i] > nums[j]) dp[i]…...
【大数据架构】OLAP实时分析引擎选型
OLAP引擎面临的挑战 常见OLAP引擎对比 OLAP分析场景中,一般认为QPS达到1000就算高并发,而不是像电商、抢红包等业务场景中,10W以上才算高并发,毕竟数据分析场景,数据海量,计算复杂,QPS能够达到1…...
代码随想录刷题题Day29
刷题的第二十九天,希望自己能够不断坚持下去,迎来蜕变。😀😀😀 刷题语言:C Day29 任务 ● 01背包问题,你该了解这些! ● 01背包问题,你该了解这些! 滚动数组 …...
CVE-2023-51385 OpenSSH ProxyCommand命令注入漏洞
一、背景介绍 ProxyCommand 是 OpenSSH ssh_config 文件中的一个配置选项,它允许通过代理服务器建立 SSH 连接,从而在没有直接网络访问权限的情况下访问目标服务器。这对于需要经过跳板机、堡垒机或代理服务器才能访问的目标主机非常有用。 二、漏洞简…...
如何寻找到相对完整的真正的游戏的源码 用来学习?
在游戏开发的学习之路上,理论与实践是并重的两个方面。对于许多热衷于游戏开发的学习者来说,能够接触到真实的、完整的游戏源码无疑是一个极好的学习机会。但问题来了:我们该如何寻找到这些珍贵的资源呢? 开源游戏项目 GitHub:地…...
数模学习day11-系统聚类法
本文参考辽宁石油化工大学于晶贤教授的演示文档聚类分析之系统聚类法及其SPSS实现。 目录 1.样品与样品间的距离 2.指标和指标间的“距离” 相关系数 夹角余弦 3.类与类间的距离 (1)类间距离 (2)类间距离定义方式 1.最短…...
SpringBoot+Redis实现接口防刷功能
场景描述: 在实际开发中,当前端请求后台时,如果后端处理比较慢,但是用户是不知情的,此时后端仍在处理,但是前端用户以为没点到,那么再次点击又发起请求,就会导致在短时间内有很多请求…...
TensorRT加速推理入门-1:Pytorch转ONNX
这篇文章,用于记录将TransReID的pytorch模型转换为onnx的学习过程,期间参考和学习了许多大佬编写的博客,在参考文章这一章节中都已列出,非常感谢。 1. 在pytorch下使用ONNX主要步骤 1.1. 环境准备 安装onnxruntime包 安装教程可…...
springboot常用扩展点
当涉及到Spring Boot的扩展和自定义时,Spring Boot提供了一些扩展点,使开发人员可以根据自己的需求轻松地扩展和定制Spring Boot的行为。本篇博客将介绍几个常用的Spring Boot扩展点,并提供相应的代码示例。 1. 自定义Starter(面试常问) Sp…...
19道ElasticSearch面试题(很全)
点击下载《19道ElasticSearch面试题(很全)》 1. elasticsearch的一些调优手段 1、设计阶段调优 (1)根据业务增量需求,采取基于日期模板创建索引,通过 roll over API 滚动索引; (…...
向爬虫而生---Redis 拓宽篇3 <GEO模块>
前言: 继上一章: 向爬虫而生---Redis 拓宽篇2 <Pub/Sub发布订阅>-CSDN博客 这一章的用处其实不是特别大,主要是针对一些地图和距离业务的;就是Redis的GEO模块。 GEO模块是Redis提供的一种高效的地理位置数据管理方案,它允许我们存储和查询…...
Vue项目里实现json对象转formData数据
平常调用后端接口传参都是json对象,当提交表单遇到有附件需要传递时,通常是把附件上传单独做个接口,也有遇到后端让提交接口一并把附件传递到后端,这种情况需要把参数转成formData的数据,需要用到new FormData()。json…...
leetcode刷题记录
栈 2696. 删除子串后的字符串最小长度 哈希表 1. 两数之和 用map来保存每个数和他的索引 383. 赎金信 用map来存储字符的个数 链表 2. 两数相加 指针的移动 动态规划 53. 最大子数组和 2707. 字符串中的额外字符 递归 101. 对称二叉树 数学 1276. 不浪费原料的汉堡…...
SpringMVC通用后台管理系统源码
整体的SSM后台管理框架功能已经初具雏形,前端界面风格采用了结构简单、 性能优良、页面美观大的Layui页面展示框架 数据库支持了SQLserver,只需修改配置文件即可实现数据库之间的转换。 系统工具中加入了定时任务管理和cron生成器,轻松实现系统调度问…...
深度解析Dubbo的基本应用与高级应用:负载均衡、服务超时、集群容错、服务降级、本地存根、本地伪装、参数回调等关键技术详解
负载均衡 官网地址: http://dubbo.apache.org/zh/docs/v2.7/user/examples/loadbalance/ 如果在消费端和服务端都配置了负载均衡策略, 以消费端为准。 这其中比较难理解的就是最少活跃调用数是如何进行统计的? 讲道理, 最少活跃数…...
备战2024美赛数学建模,文末获取历史优秀论文
总说(历年美赛优秀论文可获取) 数模的题型千变万化,我今天想讲的主要是一些「画图」、「建模」、「写作」和「论文结构」的思路,这些往往是美赛阅卷官最看重的点,突破了这些点,才能真正让你的美赛论文更上…...
Java加密解密大全(MD5、RSA)
目录 一、MD5加密二、RSA加解密(公加私解,私加公解)三、RSA私钥加密四、RSA私钥加密PKCS1Padding模式 一、MD5加密 密文形式:5eb63bbbe01eeed093cb22bb8f5acdc3 import java.math.BigInteger; import java.security.MessageDigest; import java.security…...
网站建设步骤电脑/如何创建网站教程
for counter in range( 10 ): print counter #打印for语句的每个计算器...
wordpress转为pdf/建网站教学
在javascript中,当我们需要知道一个变量的基本数据类型的时候可以使用typeof,结果可以是"undefined、"boolean"、"number"、"string"、"function"和"object",而需要检测引用类型的时…...
建一个网站式系统/网络推广团队
php-fpm经常出现502解决方法更多请支持:www.Bkjia.com最近nginx经常502,解决502最好的办法就是重启php-fpm。手动去重启还是比较麻烦的事情,最好的就是扔到shell里去。vim restart-php-fpm.sh#!/bin/shSERVICEphp-fpm#if ps ax | grep -v gre…...
电子商务网站建设文案/福州seo视频
新智元报道来源:武汉大学等编辑:白峰、张佳【新智元导读】武汉大学的一位大三学生花了3、4个小时,用代码敲出樱花开放,一朵朵樱花由无数个“武汉加油”汇聚在一起,每个字都是一个像素点,网友纷纷点赞&#…...
学士学位网站重置密码怎么做/中国2022年重大新闻
###############################################################################环境准备:一台服务器启用三个虚拟主机实现不同的功能:vhost1:用于连接后端数据库;vhost2:提供博客vhost3:提供论坛各个主机名规划&a…...
wordpress 查看url/百度手游排行榜
【题目】方阵填数:在一个 N*N的方阵中,填入 1,2..... N*N个数,并要求构成如下格式: 图例:10 11 12 19 16 13 28 15 14 37 6 5 4【上手】观察图例,不难看出这是一个螺旋矩阵,下面是色…...