当前位置: 首页 > article >正文

C++(4)

四、模板与容器

1. 模板

1.1 函数模板

#include <iostream>
using namespace std;// 函数模板声明
template<typename T>  // 也可使用 class
T add(T a, T b) {return a + b;
}int main() {string a = "hello";string b = "world";cout << add(a, b) << endl;    // 输出 hello worldcout << add(1, 2) << endl;    // 输出 3cout << add(1.3, 2.2) << endl;// 输出 3.5return 0;
}

1.2 类模板(类内声明类外定义)

#include <iostream>
using namespace std;// 类模板声明
template<class T>
class Test {
private:T val;
public:Test(T val);                // 构造函数声明T get_val();                // 获取值声明void set_val(const T &val); // 设置值声明
};// 类模板成员函数定义
template<class T>
Test<T>::Test(T val) : val(val) {}template<class T>
T Test<T>::get_val() {return val;
}template<class T>
void Test<T>::set_val(const T &val) {this->val = val;
}int main() {Test<int> t1(20);cout << t1.get_val() << endl;t1.set_val(10);cout << t1.get_val() << endl;Test<double> t2(20.3);cout << t2.get_val() << endl;return 0;
}

2. 容器

2.1 标准模板库(STL)

STL包含三大组件:

  • ​算法​​(algorithm)
  • ​容器​​(container)
  • ​迭代器​​(iterator)

2.2 顺序容器

2.2.1 array数组
#include <array>
#include <iostream>
using namespace std;int main() {array<int, 5> arr = {1, 2, 3}; // 后两位自动初始化为0// 访问元素cout << arr[0] << endl;    // 1cout << arr.at(4) << endl; // 0(推荐使用at())// 修改元素arr[3] = 200;// 遍历方式for(int i = 0; i < arr.size(); i++) {cout << arr[i] << endl;}for(auto num : arr) {cout << num << endl;}return 0;
}
2.2.2 vector向量
#include <vector>
#include <iostream>
using namespace std;int main() {vector<int> vec(5); // 创建长度为5的int容器// 添加元素vec.push_back(222);vec.insert(vec.begin()+2, 333);// 修改元素vec[1] = 666;vec.at(3) = 777;// 删除元素vec.pop_back();          // 删除末尾vec.erase(vec.begin()+1);// 删除指定位置// 遍历方式for(int i = 0; i < vec.size(); i++) {cout << vec[i] << endl;}for(auto num : vec) {cout << num << " ";}return 0;
}
2.2.3 list列表
#include <list>
#include <string>
#include <iostream>
using namespace std;int main() {list<string> lis(5, "hello"); // 初始化5个"hello"// 添加元素lis.push_back("world");lis.push_front("haha");lis.insert(++lis.begin(), "222");// 删除元素lis.pop_front();auto it = lis.begin();advance(it, 1);lis.insert(it, "333");lis.erase(--lis.end());// 修改元素it = lis.end();advance(it, 2);*it = "200";// 遍历输出for(string s : lis) {cout<< s << endl;}return 0;
}
2.2.4 deque队列
#include <deque>
#include <iostream>
using namespace std;int main() {deque<int> deq(5);// 添加元素deq.push_back(222);deq.insert(deq.begin()+2, 333);// 修改元素deq[1] = 666;deq.at(3) = 777;// 删除元素deq.pop_back();deq.erase(deq.begin()+1);// 遍历输出for(int i = 0; i < deq.size(); i++) {cout << deq[i] << endl;}return 0;
}

2.3 关联容器

2.3.1 map键值对
#include <map>
#include <string>
#include <iostream>
using namespace std;int main() {map<string, int> ma;// 添加元素ma["身高"] = 180;ma.insert(make_pair("年龄", 24));// 修改元素ma["身高"] = 175;// 查找元素if(ma.find("体重") == ma.end()) {cout << "没有体重数据" << endl;}// 删除元素ma.erase("年龄");// 遍历输出for(auto& pair : ma) {cout << pair.first << ": " << pair.second << endl;}return 0;
}

2.4 迭代器遍历

#include <vector>
#include <array>
#include <list>
#include <deque>
#include <map>
#include <iostream>
using namespace std;int main() {// 遍历stringstring s = "abcdefg";for(auto it = s.cbegin(); it != s.cend(); ++it) {cout << *it << " ";}cout << endl;// 遍历arrayarray<int, 5> arr = {1, 2, 3, 4, 5};for(auto it = arr.cbegin(); it != arr.cend(); ++it) {cout << *it << " ";}cout << endl;// 遍历mapmap<string, int> ma = {{"A", 1}, {"B", 2}};for(auto it = ma.cbegin(); it != ma.cend(); ++it) {cout << it->first << ":" << it->second << endl;}return 0;
}

相关文章:

C++(4)

四、模板与容器 1. 模板 1.1 函数模板 #include <iostream> using namespace std;// 函数模板声明 template<typename T> // 也可使用 class T add(T a, T b) {return a b; }int main() {string a "hello";string b "world";cout <&…...

构建版本没mac上传APP方法

在苹果开发者的app store connect上架Ios应用的时候&#xff0c;发现需要使用xode等软件来上传iOS的APP。 但是不管是xcode也好&#xff0c;transporter也好&#xff0c;还是命令行工具也好&#xff0c;都必须安装在mac电脑才能使用&#xff0c;。 假如没有mac电脑&#xff0…...

如何解决大模型返回的JSON数据前后加上```的情况

环境说明 springboot 应用使用dashscope-sdk-java对接阿里百练 deepseek v3模型 问题表现 已经指定了输出json格式&#xff0c;但指令不明确&#xff0c;输出JSON格式的写法如下 注&#xff1a;提示词一开始是能正常功能的&#xff0c;但过了几天就出现了异常&#xff0c;原…...

本地处理 + GPU 加速 模糊视频秒变 4K/8K 修复视频老旧素材

各位数码小达人们&#xff01;你们知道吗&#xff0c;今天我要给大家介绍一款超厉害的工具——Video2X。它就像是一个神奇的魔法棒&#xff0c;能把低分辨率的视频、GIF和图像变成高清甚至4K的&#xff0c;而且画质细节一点都不会损失&#xff01; 先来说说它的核心功能。第一…...

服务器异常数据问题解决 工具(tcpdump+wireshark+iptables)

问题&#xff1a; 某天一客户反馈&#xff0c;后台页面上显示的设备数据异常增长。现场实际只有2w台设备安装了助手(客户端)&#xff0c;但是后台显示有16w的助手设备&#xff0c;并且还在持续且快速的增长。这些数据会被加载到缓存&#xff0c;时间久了&#xff0c;服务端程序…...

综合实现案例 LVS keepalived mysql 等

基于企业级高可用架构的 Linux 案例&#xff0c;整合 Nginx、HTTPS、LVS、Keepalived、MySQL 等服务&#xff0c;实现 Web 服务的负载均衡、高可用性及数据持久化。 案例场景&#xff1a;高可用 Web服务架构 目标 构建高可用 Web 集群&#xff0c;支持负载均衡和故障自动切换…...

【QT】对话框dialog类封装

【QT】对话框dialog类封装 背景要点采用对输入框的信号监测实现端口和IP有效 实现 背景 在Qt 6.8.1 (MSVC 2022, x86_64)中进行编写&#xff0c;需要实现IP和端口号输入的弹窗&#xff0c;实现的方式有2种&#xff0c;其一&#xff0c;采用UI绘制&#xff0c;然后进行界面加载…...

2025/5/26 学习日记 基本/扩展正则表达式 linux三剑客之grep

在 Linux 系统中&#xff0c;正则表达式&#xff08;Regular Expression可用于匹配、查找和替换符合特定模式的文本。根据语法和功能的不同&#xff0c;正则表达式可分为 基础正则表达式&#xff08;BRE&#xff09; 和 扩展正则表达式&#xff08;ERE&#xff09;。 基础正则…...

【后端高阶面经:消息队列篇】29、Kafka高性能探秘:零拷贝、顺序写与分区并发实战

一、 顺序写入:磁盘性能的极致挖掘 Kafka的高性能本质上源于对磁盘顺序访问的深度优化。 传统随机写入的磁盘操作需要磁头频繁寻道,机械硬盘的随机写性能通常仅为100IOPS左右,而Kafka通过追加日志(Append-Only Log)模式,将所有消息按顺序写入分区文件,使磁盘操作转化为…...

Spring Boot企业级开发五大核心功能与高级扩展实战

前言 在企业级应用开发中&#xff0c;Spring Boot已成为事实上的Java开发标准。本文将从企业实际需求出发&#xff0c;深入剖析Spring Boot五大必用核心功能&#xff0c;并扩展讲解三项高级开发技能&#xff0c;帮助开发者掌握构建健壮、高效、易维护的企业级应用的必备技术。…...

在SpringBoot项目中策略模式的使用

使用策略模式之前的代码 Overridepublic void updateExam(String id, ExamUpdateDTO examUpdateDTO) {logger.info("Service: 修改考试场次, ID: {}, 数据: {}", id, examUpdateDTO);Exam existingExam mongoDBUtils.findById(id, Exam.class);if (existingExam nu…...

在 Docker 中启动 Jupyter Notebook

文章目录 一、创建容器二、Conda安装三、安装 Jupyter四、启动 Jupyter五、注册内核来使用虚拟环境小结 一、创建容器 可以先查看宿主机8888端口是否被占用&#xff0c;无输出&#xff0c;表明端口未被任何进程占用&#xff0c;如果有LISTEN&#xff0c;可能在创建容器的时候需…...

IP 地址反向解析(IP反查域名)原理与应用

一、IP 地址反向解析的原理与技术细节 IP 地址反向解析&#xff08;Reverse IP Lookup&#xff09;是一种将 IP 地址映射回其关联域名或主机名的网络技术&#xff0c;与常见的正向 DNS 解析&#xff08;将域名解析为 IP 地址&#xff09;形成互补。这一过程在网络安全研究、漏…...

CodeTop之LRU缓存

题目链接 146. LRU 缓存 - 力扣&#xff08;LeetCode&#xff09; 题目解析 算法原理 我们使用双向链表哈希表的形式来模拟缓存机制 首先我们要自己实现一个双链表, 自己写一个内部类, 这个内部类记录了key,value,prev,next(前驱和后继), 后续我们就通过这个内部类来构造双…...

uboot常用命令之eMMC/SD卡命令

eMMC和SD卡(TF卡)是同一类设备&#xff0c;以下命令二者是通用&#xff0c;本章节主要以eMMC举例说明命令的使用。 使用help mmc可以看到mmc相关命令列表以及其对应命令用法&#xff1a; > help mmc 一、mmc dev 使用mmc list可以看到当前系统挂载的所有mmc设备&#xff…...

【Kafka】编写消费者开发模式时遇到‘未解析的引用‘SIGUSR1’’

在编写消费者开发模式时&#xff0c;不要用简单的consumer&#xff0c;会导致消费数据不全的情况&#xff0c;需要用ConsumerGroup。 代码可以参考官方实例&#xff1a;https://github.com/Shopify/sarama/tree/main/examples/consumergroup 问题描述&#xff1a; 编写消费者开…...

DeepSeek 赋能教育游戏化:AI 重构学习体验的技术密码

目录 一、引言&#xff1a;教育游戏化与 DeepSeek 的相遇二、DeepSeek 技术剖析2.1 核心架构2.2 关键技术 三、教育游戏化设计的奥秘3.1 概念与意义3.2 常见方法与元素3.3 成功案例借鉴 四、DeepSeek 在教育游戏化设计中的多面应用4.1 个性化学习路径打造4.2 智能教学辅助工具4…...

Docker run命令-p参数详解

端口映射基础语法 docker run -p <宿主机端口>:<容器端口> 操作示例 docker run -d --restartalways --namespug -p 5000:80 registry.aliyuncs.com/openspug/spug参数解析 -d&#xff1a;后台运行容器--restartalways&#xff1a;设置容器自动重启--namespug&…...

知识宇宙-学习篇:学编程为什么从C语言开始学起?

名人说&#xff1a;博观而约取&#xff0c;厚积而薄发。——苏轼《稼说送张琥》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、C语言的历史地位与影响力1. 编程语言的"鼻祖"2. 现代技术的基础 二、…...

Mybatis-入门程序、 数据库连接池、XML映射配置文件、MybatisX

一. Mybatis 1. Mybatis是一款优秀的持久层框架&#xff0c;用于简化jdbc的开发 2. Mybatis本是Apache的一个开源项目iBatis&#xff0c;2010年这个项目有Apache迁移到了Google code&#xff0c;并且改名为MyBatis&#xff0c;2013年11月迁移到Github 3.官网&#xff1a;MyBat…...

互联网大厂Java求职面试:Spring Cloud微服务架构设计中的挑战与解决方案

互联网大厂Java求职面试&#xff1a;Spring Cloud微服务架构设计中的挑战与解决方案 面试场景设定 郑薪苦是一位拥有丰富实战经验的Java开发者&#xff0c;他正在参加一场由某知名互联网大厂的技术总监主持的面试。这场面试将围绕Spring Cloud微服务架构展开&#xff0c;涵盖…...

BUUCTF [ZJCTF 2019]EasyHeap

前置知识点: unlink知识点和手法-CSDN博客 [ZJCTF 2019]EasyHeap [ZJCTF 2019]EasyHeap 1.准备 2.ida分析 main函数 int __fastcall __noreturn main(int argc, const char **argv, const char **envp) {int n3; // eaxchar buf[8]; // [rsp0h] [rbp-10h] BYREFunsigned …...

机器学习AI精准预测复合材料性能、材料结构设计优化;数据驱动加速新材料研发,百年难遇的组合打破科研壁垒!

在人工智能与复合材料技术融合的背景下&#xff0c;复合材料的研究和应用正迅速发展&#xff0c;创新解决方案层出不穷。从复合材料性能的精确预测到复杂材料结构的智能设计&#xff0c;从数据驱动的材料结构优化到多尺度分析&#xff0c;人工智能技术正以其强大的数据处理能力…...

apache http client连接池实现原理

在java开发中我们经常会涉及到http 请求接口&#xff0c;一般有几种方式&#xff1a; java自带的 HttpURLConnectionokHttpClientapache http client 一般我们使用apache http client会比较多点&#xff0c;在代码中会进行如下调用方式&#xff1a; private static class Htt…...

如何做好一份网络安全技术文档?

在网络安全领域&#xff0c;技术文档是沟通、记录和分享专业知识的桥梁。它不仅帮助团队成员理解系统设计和安全策略&#xff0c;也为未来的维护和更新提供了宝贵的参考。对于编写网络安全技术文档来说&#xff0c;结构清晰、内容准确以及易于理解是至关重要的。本文将介绍如何…...

Android Studio 介绍

如何关闭或彻底删除一个工程 基于Android Studio的android入门——如何关闭或彻底删除一个工程 搜索内容 Android Studio高效指南&#xff1a;快速查找技巧大揭秘 build命令&#xff1a;gradle app:assembleDebug 命令解析 1. 命令结构与作用 核心功能&#xff1a;该命令…...

MD5加密(Java)

首先来看数据库里的一张员工信息表&#xff1a; 问题&#xff1a; 员工表中的密码是明文存储&#xff0c;安全性太低。 解决思路&#xff1a; 将明文密码加密后存储&#xff0c;提高安全性。 加密方式有很多&#xff0c;这里简单介绍 MD5加密方式 &#xff1a; (详细解释请转…...

[攻防世界] easyphp writeup

知识点 科学计数法的妙用 9e9 指定结尾MD5值的爆破array_search() 函数用于在数组中搜索某个值&#xff0c;并返回对应的键名。如果找不到该值&#xff0c;则返回 false 默认值匹配&#xff1a;可以利用整数绕过字符串匹配机制stricttrue时&#xff0c;数据类型和值都需要匹配…...

力扣热题100之LRU缓存机制

题目 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓存中&#xff0c;则返回关键字的值&#xff0c;否则返…...

如何不规范的设置密码

上来就干 当我们使用服务器的时候&#xff0c;有时候需要一些非常简单的密码&#xff0c;来方便使用&#xff0c;但是自己完全可控的环境下&#xff0c;我们希望我们的密码足够的简单&#xff0c;比如&#xff0c;可能它的密码就是123&#xff0c;或者是1&#xff1f; 但是当你…...