学习笔记—C++—string(一)
目录
string
为什么学习string的类
string类的常用接口
string类对象的常见构造
string类对象的访问及遍历操作
operator[]
迭代器
范围for
auto
迭代器(二)
string类对象的容量操作
size,length,max_size,capacity,clear基本用法
reserve 提前开空间,避免扩容的操作
resize
string类对象的修改操作
push_back尾插一个字符
append
operator+=
insert
erase
replace
c_str
rfind
find_first_of
find_last_not_off
substr
to_string
string类非成员函数
getline
总结
string
为什么学习string的类
● C语言中,字符串是以’\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。
● 在OJ中,有关字符串的题目基本以string类的形式出现,而且在常规工作中,为了简单、方便、快捷,基本都使用string类,很少有人去使用C库中的字符串操作函数
● string是一个管理字符数组的类
string类的常用接口
string类对象的常见构造
string::string - C++ Reference
int main()
{string s1;string s2("1111122222"); string s3("111111111111", 3); //前三个拷贝string s4(100, 'x'); //拷贝100个x初始化string s5(s2, 4, 3); //拷贝第四个字符起后三个字符string s6(s2, 4); //拷贝第四个字符后所以的字符,直到结束cout << s1 << endl;cout << s2 << endl;cout << s3 << endl;cout << s4 << endl;cout << s5 << endl;cout << s6 << endl;//s2.operator[](0) = 'x';s2[0] = 'x'; //修改第零个位置的字符为xs2[5] = 'x'; //修改第五个位置的字符为xcout << s2 << endl;//让s2里的所以字符++for (size_t i = 0; i < s2.size(); i++){s2[i]++;}cout << s2 << endl;return 0;
}
string类对象的访问及遍历操作
operator[]
结构
class string
{
public:char& operator[](size_t pos){assert(pos < _size);}
private:char* _str;size_t _size;size_t _capacity;
};
使用operator[]进行数组元素的遍历操作
int main()
{//operator[]可以访问数组的第pos位置的元素,越界就会直接报错的string s1("hello world");for (size_t i = 0; i < s1.size(); i++){cout << s1[i];//直接访问第i个位置的字符}return 0;
}
迭代器
通过迭代器进行遍历的实现操作,迭代器可以理解为像指针一样的东西。
int main()
{string s1("hello world");//string::iterator it1 = s1.begin();//用这个类型定义一个对象//我们这里的话begin访问的是h这个字符,end指向的是\0//这里将begin给到了it1it1 = s1.begin();while (it1 != s1.end())//end是最后一个数据的下一个位置{//下面的用法非常像指针,但是不是指针cout << *it1 << " ";++it1;}return 0;
}
//这个s1是一个类对象,然后我们利用这个string类里面的运算符
日常的通过下标[]访问很方便,但是这个不是通用的访问方式,这个只适合string和vector结构,不适合后面的结构,string和vector结构底层是连续的空间,才回去重载operator[]。
下标+[]不是通用的方式,但是迭代器是所有容器通用的方式。
列表的遍历
int main()
{list <int> lt;//创建一个模版对象lt//然后进行数据的插入操作lt.push_back(1);lt.push_back(2);lt.push_back(3);lt.push_back(4);//列表list <int>::iterator it =lt.begin();while (it != lt.end()){cout << *it << " ";++it ;}return 0;
}
范围for
范围for进行遍历
// 范围for C++11 语法糖// 适用于容器遍历和数组遍历// 自动取容器的数据赋值给左边的对象// 自动++,自动判断结束// 原理:范围for底层是迭代器//for (char ch : s1)//auto可以代替类型for (auto ch : s1){cout << ch << " ";}cout << endl;// 修改for (auto& ch : s1){ch++;}for (auto ch : s1){cout << ch << " ";}cout << endl;for (auto e : It){cout << e << " ";}cout << endl;
String而言有三种遍历方式:下标+[],迭代器,范围for。
范围for用于容器遍历和数组遍历。
因为迭代器底层根指针相似,所以范围for也可以遍历数组。
auto
int i = 1;int y = i;//自动推导类型auto z = y; //intauto x = 1.1; //doubleauto n = &i; //int*int& r1 = i;auto r2 = r1; //intauto& r3 = r1; //int&
//list<int>::iterator it = It.begin();auto it = It.begin();while (it != It.end()){cout << *it << " ";++it;}cout << endl;
//auto语法糖// 简化代码,替代写起来长的类型std::map<std::string, std::string> dict;//std::map<std::string, std::string>::iterator dit = dict.begin();auto dit = dict.begin();
auto真正的价值是为了方便,简化代码,替换长类型,写起来长的类型。
auto当前是不能作为形参的,C++20开始支持auto作参数,auto可以支持作为返回值的,谨慎使用。
// C++20开始支持
void func1(auto x);auto func3()
{auto y = func4();return y;
}auto func2()
{auto x = func3();//...return x;
}
整理代码
#include<iostream>
#include<string>
#include<list>
#include<map>
using namespace std;//int main()
//{
// string s1("hello,word");
//
// //下标[]+
// for (size_t i = 0; i < s1.size(); i++)
// {
// s1[i]++;
// }
//
// for (size_t i = 0; i < s1.size(); i++)
// {
// cout<<s1[i]<<" ";
// }
// cout << endl;
//
// //迭代器
// string::iterator it1 = s1.begin();
// while (it1 != s1.end())
// {
// (*it1)--;
// ++it1;
// }
// cout << endl;
//
// it1 = s1.begin();
// while (it1 != s1.end())
// {
// cout << *it1 << " ";
// ++it1;
// }
// cout << endl;
//
// list<int> It;
// It.push_back(1);
// It.push_back(2);
// It.push_back(3);
// It.push_back(4);
//
// //list<int>::iterator it = It.begin();
// auto it = It.begin();
// while (it != It.end())
// {
// cout << *it << " ";
// ++it;
// }
// cout << endl;
//
//
// //auto语法糖
// // 简化代码,替代写起来长的类型
// std::map<std::string, std::string> dict;
// //std::map<std::string, std::string>::iterator dit = dict.begin();
// auto dit = dict.begin();
//
// // 范围for C++11 语法糖
// // 适用于容器遍历和数组遍历
// // 自动取容器的数据赋值给左边的对象
// // 自动++,自动判断结束
// // 原理:范围for底层是迭代器
// //for (char ch : s1)
// //auto可以代替类型
// for (auto ch : s1)
// {
// cout << ch << " ";
// }
// cout << endl;
//
// // 修改
// for (auto& ch : s1)
// {
// ch++;
// }
//
// for (auto ch : s1)
// {
// cout << ch << " ";
// }
// cout << endl;
//
// for (auto e : It)
// {
// cout << e << " ";
// }
// cout << endl;
//
// int i = 1;
// int y = i;
// //自动推导类型
// auto z = y; //int
// auto x = 1.1; //double
// auto n = &i; //int*
// int& r1 = i;
// auto r2 = r1; //int
// auto& r3 = r1; //int&
//
// int a[] = { 1,2,3,4,5,6 };
// for (size_t i = 0; i < sizeof(a)/sizeof(int); i++)
// {
// cout << a[i] << " ";
// }
// cout << endl;
//
// for (auto e : a)
// {
// cout << e << " ";
// }
// cout << endl;
//
// return 0;
//}C++20开始支持
//void func1(auto x);
//
//auto func3()
//{
// auto y = func4();
// return y;
//}
//
//auto func2()
//{
// auto x = func3();
// //...
// return x;
//}
迭代器(二)
反向迭代器
Const 无法调用迭代器
这种方法const就能使用迭代器,但不能修改
const反向迭代器
int main()
{string s1("hello world");string::reverse_iterator rit = s1.rbegin();while (rit != s1.rend()){cout << *rit << " ";++rit; }cout << endl;const string s2(s1);//string::const_iterator it1 = s2.begin();auto it1 = s2.begin();while (it1 != s2.end()){//*it1 += 1;cout << *it1 << " ";++it1;}cout << endl;//string::const_reverse_iterator rit1 = s2.rbegin();auto rit1 = s2.rbegin();while (rit1 != s2.rend()){cout << *rit1 << " ";++rit1;}cout << endl;return 0;
}
string类对象的容量操作
注意:
1. size()与length()方法底层实现原理完全相同,引入size()的原因是为了与其他容器的接
口保持一致,一般情况下基本都是用size()。
2. clear()只是将string中有效字符清空,不改变底层空间大小。
3. resize(size_t n) 与 resize(size_t n, char c)都是将字符串中有效字符个数改变到n个,不
同的是当字符个数增多时:resize(n)用0来填充多出的元素空间,resize(size_t n, char
c)用字符c来填充多出的元素空间。注意:resize在改变元素个数时,如果是将元素个数
增多,可能会改变底层容量的大小,如果是将元素个数减少,底层空间总大小不变。
4. reserve(size_t res_arg=0):为string预留空间,不改变有效元素个数,当reserve的参
数小于string的底层空间总大小时,reserver不会改变容量大小。
size,length,max_size,capacity,clear基本用法
int main()
{string s1("hello world");//size和length结果是一样的cout << s1.size() << endl;cout << s1.length() << endl;//看最大开辟空间,无意义cout << s1.max_size() << endl;//空间大小cout << s1.capacity() << endl;cout << endl << endl;//清除空间,让size变成0s1.clear();cout << s1.size() << endl;cout << s1.capacity() << endl;return 0;
}
reserve 提前开空间,避免扩容的操作
// reserve 保留 预留
// reverse 反向 翻转
int main()
{string s1;// 提前开空间,避免扩容s1.reserve(200);size_t old = s1.capacity();cout << "capacity:" << old << endl;for (size_t i = 0; i < 200; i++){s1 += 'x';if (s1.capacity() != old){cout << "capacity:" << s1.capacity() << endl;old = s1.capacity();}}string s3("11111111");string s4("111111112222222222222222222222222222222222222222222");cout << sizeof(s3) << endl;return 0;
}
resize
int main()
{string s1("11111111111111111111");cout << s1 << endl;cout << s1.size() << endl;cout << s1.capacity() << endl;//删除//<sizes1.resize(15);cout << s1 << endl;cout << s1.size() << endl;cout << s1.capacity() << endl;//插入//size< <capacity//把空间扩容到25,并把后面空间全部插入x; s1.resize(25)如果是这样,那么插入\0s1.resize(25,'x');cout << s1 << endl;cout << s1.size() << endl;cout << s1.capacity() << endl;//<capacity//扩容到40,并插入xs1.resize(40,'x');cout << s1 << endl;cout << s1.size() << endl;cout << s1.capacity() << endl;return 0;
}
string类对象的修改操作
push_back尾插一个字符
int main()
{string s1("hello world");//尾插字符s1.push_back(',');s1.push_back('x');cout << s1 << endl;return 0;
}
append
//int main()
//{
//
// //尾插字符串
// //插入字符串
// s1.append("orld");
// cout << s1 << endl;
//
// //插入十个感叹号
// s1.append(10, '!');
// cout << s1 << endl;
//
// //插入函数
// string s2("hello,wuguo");
// s1.append(s2.begin(), s2.end());
// cout << s1 << endl;
//
// //插入第六个函数之后的字母
// string s3("hello,wuguo");
// s1.append(s2.begin()+6, s2.end());
// cout << s1 << endl;
//
// return 0;
//}
operator+=
// //直接+=,唯一真神
// string s4("hello");
// s4 += ',';
// s4 += "world";
// cout << s4 << endl;
insert
//int main()
//{
// //Insert相当于插入
// string s1("hello,world");
// //后面的数据就是往后面进行挪动的
// s1.insert(5, "xxxxx");
// cout << s1 << endl;
//
// return 0;
//}
erase
相当于删除
replace
//int main()
//{
// //replace相当于替换
// string s1("hello,world");
// cout << s1 << endl;
// s1.replace(5, 1, "%%");
// cout << s1 << endl;
//
// return 0;
//}
加上find就能把空格也能替换了
find的默认位置是从0开始找的,我们给什么值就从什么位置开始找。
c_str
rfind
int main()
{string s3("test.cpp");//现在我们想将后缀取出来//那么我们后缀的特征就是前面有一个点,以点进行区分操作//那么这个时候就可以使用rfind了size_t pos = s3.rfind('.');if (pos != string::npos)//找到的话{//这个时候我们就找到位置了,那么我们就要利用substr这个从pos位置开始取子串string sub = s3.substr(pos);//从pos位置开始取;cout << sub << endl;}
}
find就是正向找,rfind就是倒着找。
find_first_of
// std::string str("Please, replace the vowels in this sentence by asterisks.");
// std::size_t found = str.find_first_of("aeiou");
// while (found != std::string::npos)
// {
// str[found] = '*';
// found = str.find_first_of("aeiou", found + 1);
// }
//
// std::cout << str << '\n';
//
// return 0;
//}
只要你这个字符串里面有我给的这个字符串里面任意一个字符的话,我们就将这个字符变成*。
find_last_not_off
int main()
{std::string str("Please, replace the vowels in this sentence by asterisks.");cout << str << endl;std::size_t found = str.find_first_not_of("aeiou");while (found != std::string::npos){str[found] = '*';found = str.find_first_not_of("aeiou", found + 1);}std::cout << str << '\n';return 0;
}
保留元音字母,其他字母全部屏蔽掉,只有aeiou留下来了。
substr
从pos位置取len个字符,然后将这几个衣服构成资格子串string
// string s3("test.cpp.zip");
// size_t pos = s3.rfind('.');
// if (pos != string::npos)
// {
// string sub = s3.substr(pos);
// cout << sub << endl;
// }
to_string
将数据转换为字符串
//int main()
//{
// string s3 = to_string(11.11);
//
// string s1, s2;
// cin >> s1 >> s2;
// cout << s1 << endl;
// cout << s2 << endl;
//
// return 0;
//}
string类非成员函数
getline
遇到#号才停止
总结
常用的:构造、迭代器、容量里面的几个。
相关文章:
学习笔记—C++—string(一)
目录 string 为什么学习string的类 string类的常用接口 string类对象的常见构造 string类对象的访问及遍历操作 operator[] 迭代器 范围for auto 迭代器(二) string类对象的容量操作 size,length,max_size,capacity,clear基本用法 reserve 提…...
Linux命令-Shell编程
Shell是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核。 写一个hello.sh脚本: 1.mkdir scripts 2.cd scripts 3.touch hello.sh 4.vim hello.sh #!/bin/bash echo "hello,world" 5.bash hello.sh(…...
基于Django的AI客服租车分析系统
基于Django的AI客服租车分析系统 【包含内容】 【一】项目提供完整源代码及详细注释 【二】系统设计思路与实现说明 【三】AI智能客服与用户交互指导手册 【技术栈】 ①:系统环境:Python 3.8,Django 4.2框架 ②:开发环境&a…...
计算机组成与体系结构:计算机结构的分类(classifications of computer architecture)
目录 Von Neumann Architecture(冯诺依曼结构) Harvard Architecture(哈佛结构) Modified Harvard Architecture(改进哈佛结构) 三种结构对比总结表 💡 从“内存访问结构”角度分类&#x…...
在阿里云和树莓派上编写一个守护进程程序
目录 一、阿里云邮件守护进程 1. 安装必要库 2. 创建邮件发送脚本 mail_daemon.py 3. 设置后台运行 二、树莓派串口守护进程 1. 启用树莓派串口 2. 安装依赖库 3. 创建串口输出脚本 serial_daemon.py 4. 设置开机自启 5. 使用串口助手接收 一、阿里云邮件守护进程 1.…...
Redis 的几种数据类型
Redis 提供了多种数据类型,以支持不同的应用场景。每种数据类型都有其特定的操作方式,并且在内部实现上也有所优化,能够满足不同的业务需求。以下是 Redis 支持的几种常见数据类型: 1. 字符串(String) 描…...
Spring之我见 - Spring Boot Starter 自动装配原理
欢迎光临小站:致橡树 Spring Boot Starter 的核心设计理念是 约定优于配置,其核心实现基于 自动配置(Auto-Configuration) 和 条件化注册(Conditional Registration)。以下是其生效原理: 约定…...
LeRobot 项目部署运行逻辑(二)—— Mobile Aloha 真机部署
LeRobot 在开源项目中详细说明了部署流程,所以首先看一下开源的内容,然后再逐步拆解 首先,LeRobot 开源的硬件是配全部在 examples 文件夹中 包括了 Stretch 3、Aloha and Aloha 2 stationary、SO-100、LeKiwi、Moss v1 等机器人 恰好实验…...
大模型面经 | 介绍一下CLIP和BLIP
大家好,我是皮先生!! 今天给大家分享一些关于大模型面试常见的面试题,希望对大家的面试有所帮助。 往期回顾: 大模型面经 | 春招、秋招算法面试常考八股文附答案(RAG专题一) 大模型面经 | 春招、秋招算法面试常考八股文附答案(RAG专题二) 大模型面经 | 春招、秋招算法…...
Java发生OOM是否必然导致JVM退出
Java发生OOM是否必然导致JVM退出? 核心结论 不一定。OOM是否导致JVM退出取决于以下因素: OOM发生的区域JVM启动参数配置是否捕获了OOM异常 详细分析 1. 不同内存区域的OOM影响 内存区域错误类型默认是否导致JVM退出可恢复性Java堆OutOfMemoryError…...
Docker Compose 外部网络(`external: true`)与内部网络的区别
Docker Compose 外部网络(external: true)与内部网络的区别 在 Docker Compose 中,external: true 声明的外部网络与普通(内部)网络有重要区别,以下是它们的详细对比: 1. 定义与创建方式 特性外部网络 (external: true)内部网络 (默认)创建…...
【Android】Wallpaper学习
从wallpaper的设置来了解相关内容: 一,静态壁纸 静态壁纸设置的原理是在WallpaperManagerService里监听/data/system/users/0/wallpaper_orig相关文件的变化来触发设置,通过相应的组件程序去进行绘制, 相应的组件如:…...
Java基础-第一章、基本数据类型
运算符: 1.算术运算符:加减乘除%等 2.逻辑运算符:与或非等 3.关系运算符:大于、小于... 4.赋值运算符: 这里牵扯运算符的运算先后顺序了。 赋值运算的返回值:就是赋值的变量本身...
《Operating System Concepts》阅读笔记:p748-p748
《Operating System Concepts》学习第 64 天,p748-p748 总结,总计 1 页。 一、技术总结 1.Transmission Control Protocol(TCP) 重点是要自己能画出其过程,这里就不赘述了。 二、英语总结(生词:3) transfer, transport, tran…...
Arduino示例代码讲解:Project 08 - Digital Hourglass 数字沙漏
Arduino示例代码讲解:Project 08 - Digital Hourglass 数字沙漏 Project 08 - Digital Hourglass 数字沙漏程序功能概述功能:硬件要求:输出:代码结构全局变量`setup()` 函数`loop()` 函数计时和点亮LED:读取倾斜开关状态:重置LED和计时器:运行过程注意事项Project 08 - …...
报告总结笔记 | Jeff Dean ETH AI趋势 笔记:AI 的重要趋势:我们是如何走到今天的,我们现在能做什么,以及我们如何塑造 AI 的未来?
报告总结笔记 | Jeff Dean ETH AI趋势 笔记:AI 的重要趋势:我们是如何走到今天的,我们现在能做什么,以及我们如何塑造 AI 的未来? 2025年 4 月 14 日,Google Research 及 Google DeepMind 的首席科学家、A…...
RocketMQ实现基于可靠消息的最终一致性
RocketMQ实现基于可靠消息的最终一致性 文章目录 RocketMQ实现基于可靠消息的最终一致性一、RocketMQ应用场景**应用解耦****流量削峰****数据分发** 二、RocketMQ 基础概念1. 核心组件2. 消费模式3. 消息可靠性 三、消息类型按发送方式分同步发送异步发送单向发送 按使用功能特…...
【题解-Acwing】790. 数的三次方根
题目:790. 数的三次方根 题目描述 给定一个浮点数 n,求它的三次方根。 输入 共一行,包含一个浮点数 n 。 输出 共一行,包含一个浮点数,表示问题的解。 注意,结果保留 6 位小数。 数据范围 −10000 ≤ n ≤ 10000 时空限制 1s / 64MB 输入样例 1000.00输出样…...
一键升级OpenSSH/OpenSSL修复安全漏洞
在服务器安全运维过程中,我们经常面临这样的问题:收到高危漏洞通报(如最近的OpenSSH多个CVE漏洞),但Ubuntu系统无法通过apt直接升级到修复版本。这种情况下,传统方法需要手动编译源码,处理依赖关…...
Pycharm 如何删除某个 Python Interpreter
在PyCharm中,点击右下角的“Interpreter Settings”按钮,或者通过菜单栏选择“File” > “Settings”(macOS用户选择“PyCharm” > “Preferences”)。在设置窗口中,导航到“Project: [Your Project Name]” >…...
【C++】深入浅出之多态
目录 多态的概念多态的定义和实现多态的构造条件虚函数虚函数的重写虚函数重写的两个例外协变析构函数作为虚函数重写 C11的override和final重载、重写(覆盖)、隐藏(重定义)的对比相关面试题⭐ 抽象类概念接口继承和实现继承 多态的原理虚函数表多态的原理动态绑定和静态绑定 e…...
精益数据分析(9/126):如何筛选创业路上的关键数据指标
精益数据分析(9/126):如何筛选创业路上的关键数据指标 大家好!在创业的漫漫长路中,数据就像一盏明灯,指引着我们前行的方向。但要让这盏灯发挥作用,关键在于找到那些真正有价值的数据指标。今天…...
【Python爬虫详解】第二篇:HTML结构的基本分析
在上一篇文章中,我们介绍了网络爬虫的基本概念、发展历程和工作原理。要进行有效的网页内容爬取,首先需要理解我们要爬取的对象 —— 网页的基本结构和语法。网页本质上是由HTML代码构成的,爬虫程序需要从HTML中提取我们需要的信息。因此&…...
【C++】 —— 笔试刷题day_21
一、爱丽丝的人偶 题目解析 现在存在n个玩偶,每个玩偶的身高是1、2、3......n; 现在我们要对这些玩偶进行排序(如果x人偶,它左右两边的玩偶一个比x高、一个比x矮,那这个玩偶就会爆炸)。 我们不想要任何一个…...
云点数据读写
一、常见点云数据格式 LAS/LAZ格式 LAS是点云数据的行业标准格式 LAZ是LAS的压缩版本 支持地理参考信息、颜色、强度等属性 PCD格式(Point Cloud Data) PCL(Point Cloud Library)开发的格式 支持ASCII和二进制存储 包含头部信息和数据部分 PLY格式(Polygon File Format…...
Matlab 汽车行驶速度PID控制系统仿真
1、内容简介 Matlab 213-汽车行驶速度PID控制系统仿真 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略...
STM32嵌入式
一、创建工程项目 1、进入软件首页 2、新建项目,【file】->【new project】 3、选择需要的芯片 4、系统内核部分设置 ① 选择晶振(使用外部的高速晶振) ② 选择debug形式(SW类型) 5、时钟设置 6、选择自己需要的引脚设置&a…...
机器学习(神经网络基础篇)——个人理解篇6(概念+代码)
1 在声明一个类中,构建一个属于类的函数,前面为什要加上“self”? 就像下面这一串代码: class TwoLayerNet:def __init__(self, input_size, hidden_size, output_size,weight_init_std0.01):# 初始化权重self.params {}self.p…...
Java学习手册:Filter 和 Listener
在 JavaWeb 开发中,Filter(过滤器)和 Listener(监听器)是两个重要的技术组件,它们在处理客户端请求、管理应用状态和资源以及实现全局逻辑控制等方面发挥着关键作用。 一、Filter(过滤器&#…...
深度学习总结(25)
抽样偏倚问题 非代表性数据有一个特别隐蔽又特别常见的例子,那就是抽样偏倚(sampling bias)。如果你的数据收集过程与你尝试预测的目标之间存在相互影响,就会出现抽样偏倚,从而导致有偏差的结果。 理解数据 将数据…...
探索 Model Context Protocol (MCP):它如何影响 AI 的表现?
Anthropic 公司 Anthropic 是一家技术实力雄厚的公司,也是大模型领域的重要参与者之一。其开发的 **Claude 模型** 是全球首个以编程能力见长并广受欢迎的大语言模型。这款模型凭借卓越的代码生成和理解能力,迅速成为许多开发者工具的核心组件。例如&am…...
Three.js + React 实战系列-3D 个人主页 :完成 Navbar 导航栏组件
在上一节中,我们搭建了项目的基础结构,搭建好了项目框架。 本节我们将继续完善页面结构,完成第一个视觉组件 —— Navbar 导航栏 ✅ 前置准备: ✅下载静态资源在根目录下 (src 同级)谷歌云盘地址 🎥 02 完成 Navba…...
游戏引擎学习第238天:让 OpenGL 使用我们的屏幕坐标
回顾并为今天的内容做准备 我们已经完成了硬件显示的实现,现在通过GPU来显示游戏。原本以为这会花费很长时间,但结果实际所需的时间并不多。因此,我们现在有了进展,但接下来应该做什么还不确定。虽然有很多事情可以做,…...
go+mysql+cocos实现游戏搭建
盲目的学了一段时间了,刚开始从Box2d开始学习,明白了很多,Box2d是物理模型的基础,是我们在游戏中模拟现实的很重要的一个开源工具。后来在朋友的建议下学习了cocos,也是小程序开发的利器,而golang是一款高效…...
Linux 网络基础(二) (传输协议层:UDP、TCP)
目录 一、传输层的意义 二、端口号 1、五元组标识一个通信 2、端口号范围划分 3、知名端口号(Well-Know Port Number) (1)查看端口号 4、绑定端口号数目问题 5、pidof & netstat 命令 (1)ne…...
Vue常用指令入门
1. v-for 作用:用于遍历对象或数组 注意:需要提供key属性,可以提高性能和避免渲染错误,值通常为index或item.id <li v-for"(item, index) in items" :key"index">{{ item }} </li>2. v-if,v-el…...
【文献阅读】EndoNet A Deep Architecture for Recognition Tasks on Laparoscopic Videos
关于数据集的整理 Cholec80 胆囊切除手术视频数据集介绍 https://zhuanlan.zhihu.com/p/700024359 数据集信息 Cholec80 数据集 是一个针对内窥镜引导 下的胆囊切除手术视频流程识别数据集。数据集提供了每段视频中总共7种手术动作及总共7种手术工具的标注,标…...
UML统一建模
UML UML(统一建模语言)介绍 UML(统一建模语言)介绍 面向对象软件开发需要经过OOA面向对象分析、OOD面向对象设计和OOP面向对象编程三个阶段。OOA对目标系统进行分析并寄哪里分析模型,并将之文档化,OOD用面向…...
Ubuntu下安装和卸载MySQL
Ubuntu下安装和卸载MySQL 下面的演示系统版本:Ubuntu 24.04 更新系统软件包 在开始安装之前,建议先更新系统的软件包列表,以确保所有依赖项是最新的。 sudo apt update && sudo apt upgrade -y安装MySQL服务器 Ubuntu的官方软件…...
物联网技术赋能:复杂环境下的能源数据零丢失
安科瑞顾强 在全球能源挑战日益严峻的背景下,高效节能已成为各行业的核心诉求。无论是商业综合体、工业厂房还是公共设施,如何实现能源的精细化管理成为关键课题。安科瑞能耗云平台凭借其创新技术与多功能服务,为企业提供了一站式能源管理解…...
卷积神经网络综述
摘要 本文对卷积神经网络(Convolutional Neural Network,CNN)进行了全面综述。首先介绍了卷积神经网络的发展历程,包括早期的理论基础和关键突破。接着详细阐述了卷积神经网络的结构组成,包括卷积层、池化层、全连接层…...
SpringBoot3设置maven package直接打包成二进制可执行文件
注意事项 SpringBoot普通native打包顺序clean compile spring-boot:process-aot native:compile 使用以下配置只会的打包顺序clean package(注意:使用此配置以后打包会有编译后的class文件、jar包、original源文件、二进制可执行文件【Linux是无后缀的包…...
在 Anaconda 上安装多版本 Python 解释器并在 PyCharm 中配置
默认已安装好 Anaconda 和 PyCharm ,想在 Anaconda 上安装最新版本的 Python 解释器。 一、在 Anaconda 上创建虚拟环境 在连网状态下进入系统的命令提示符(快捷键:win r ,输入 cmd 即可),输入如下命令&a…...
AES (高级加密标准)
原理详解 AES是一种对称加密算法,使用相同的密钥进行加密和解密。它采用替代-置换网络(SPN)结构,主要步骤包括: 密钥扩展:从初始密钥派生多轮密钥 初始轮:AddRoundKey(轮密钥加) 主轮ÿ…...
Git拉分支技巧:从零开始创建并推送分支
Git拉分支技巧:从零开始创建并推送分支 在团队协作开发中,Git 分支管理是不可或缺的技能。合理地创建、同步和推送分支,不仅能提高开发效率,还能避免代码冲突。本文将基于以下技巧,详细讲解如何从零开始创建并推送一个…...
线性回归之归一化(normalization)
文章目录 归一化与梯度下降归一化的必要性:从特征量纲到梯度下降问题背景矛盾与低效归一化的作用 归一化提高模型精度的原因归一化的本质常见归一化方法最大值最小值归一化示例说明优缺点分析 标准归一化具体机制示例说明 强调 归一化与梯度下降 归一化与梯度下降 &…...
mac监控linux上mysql性能(Grafana+Prometheus+mysqld_exporter)
一、监控查看端安装 Grafana安装-CSDN博客 普罗米修斯Prometheus监控安装(mac)-CSDN博客 1.启动Grafana服务 brew services start grafana 打开浏览器输入http://localhost:3000进入grafana登录页面 (默认用户名和密码都为admin,进入后…...
【玩泰山派】MISC(杂项)- linux桌面环境
文章目录 linux桌面环境linux四大桌面环境概述ubuntu基于四大桌面环境的版本 显示管理器gdm3(GNOME Display Manager)lightdm(Lightweight Display Manager)SDDM(Simple Desktop Display Manager)KDM&#…...
MVCC介绍
MVCC(多版本并发控制)详解 MVCC(Multi-Version Concurrency Control) 是一种数据库并发控制技术,核心思想是通过维护数据的多个版本来实现读写操作的无锁并发,从而在高并发场景下提升性能。它广泛用于 MyS…...
神经网络与模型训练过程笔记
1.专有名词 ANN 人工神经网络,一种受生物神经元启发的监督学习算法。输入数据通过网络中的层级函数传递,激活特定神经元。函数复杂度越高,模型对数据的拟合能力越强,预测精度越高。 偏置项 其中x下表从1开始的是输入变量…...