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

C++效率掌握之STL库:string函数全解

文章目录

  • 1.为什么要学习string?什么是string?
  • 2.string类对象的常见构造
  • 3.string类对象的容量操作
  • 4.string类对象的迭代器
  • 5.string类对象的元素访问
  • 6.string类对象的元素修改
  • 7.string类对象的查找、提取、对比
  • 8.string类的非成员函数及npos
  • 希望读者们多多三连支持
  • 小编会继续更新
  • 你们的鼓励就是我前进的动力!

从本篇开始将开启C++里的STL库专题,网上有句话说:“不懂STL,不要说你会C++”。STL是C++中的优秀作品,有了它的陪伴,许多底层的数据结构以及算法都不需要自己重新造轮子,站在前人的肩膀上,健步如飞的快速开发

1.为什么要学习string?什么是string?

C语言中,字符串是以’\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问

因此创建了string类,比STL库还要早出现,所以有一定的缺陷和冗余

在这里插入图片描述

string的主要特征可总结为:

  1. 字符串是表示字符序列的类
  2. 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作
  3. string在底层实际是:basic_string模板类的别名
    typedef basic_string<char, char_traits, allocator> string
  4. 这个类独立于所使用的编码来处理字节:如果用来处理多字节或变长字符(如UTF-8)的序列,这个类的所有成员(如长度或大小)以及它的迭代器,将仍然按照字节(而不是实际编码的字符)来操作

2.string类对象的常见构造

在这里插入图片描述

string作为一个类也有构造函数析构函数=运算符重载,我们重点介绍构造函数里的功能

函数名功能说明
string()构造空的string类对象,即空字符串
string (const char* s)C-string来构造string类对象
string (const string& str)拷贝构造函数
string (const char* s, size_t n)s 指向的字符数组中复制前 n 个字符
string (size_t n, char c)string类对象中包含n个字符c
string (const string& str, size_t pos, size_t len = npos)复制从字符位置 pos 开始并跨越 len 字符的 str 部分(或者直到 str 的末尾,如果 str 太短或 lenstring::npos)
string (InputIterator first, InputIterator last)按顺序复制范围 [first,last) 中的字符序列

💻代码测试示例:

#include <iostream>
#include <string>
using namespace std;int main()
{string s0("Initial string");string s1;string s2(s0);string s3(s0, 8, 3);string s4("Hello");string s5("Best wish!", 4);string s6a(10, 'x');string s6b(10, 42);      // *的ASCII值是42string s7(s0.begin(), s0.begin() + 7);cout << "s1: " << s1 << "\ns2: " << s2 << "\ns3: " << s3;cout << "\ns4: " << s4 << "\ns5: " << s5 << "\ns6a: " << s6a;cout << "\ns6b: " << s6b << "\ns7: " << s7 << '\n';return 0;
}

⌨️代码输出示例:

在这里插入图片描述

3.string类对象的容量操作

在这里插入图片描述

通常在C语言阶段,想要知道字符串的长度,或者对其大小容量进行操作,都要自己手撕函数,不仅耗时还费力,所以string提供了现成的函数

函数名功能说明
size返回字符串有效字符长度
length返回字符串有效字符长度(不常用)
max_size返回的是 string 理论上能够容纳的最大字符数
resize将有效字符的个数增加或减少 n 个,多出的空间用字符 c 或空格填充,少的截断字符串
capacity返回空间总大小,即容量
reserve为字符串增加预留空间,即增加预留容量
clear移除 string 对象中存储的所有字符
empty检测字符串释放为空串,是返回 true ,否则返回 false
shrink_to_fit请求 string 对象将其容量缩小到和当前字符串长度相匹配的大小

🔥值得注意的是:

  1. size()length()方法底层实现原理完全相同,引入size()的原因是为了与其他容器的接口保持一致,一般情况下基本都是用size()
  2. clear() 只是将 string 中有效字符清空,即大小size缩为 0 ,不改变底层空间大小,即容量 capacity 不改变
  3. resize(size_t n)resize(size_t n, char c) 都是将字符串中有效字符个数改变到 n 个,不同的是当字符个数增多时:resize(n) 用空格来填充多出的元素空间,resize(size_t n, char c) 用字符 c 来填充多出的元素空间。注意:resize 在改变元素个数时,如果是将元素个数增多,可能会改变底层容量的大小,如果是将元素个数减少,底层空间总大小不变
  4. reserve(size_t res_arg=0):为 string 预留空间,不改变有效元素个数,当 reserve 的参数小于 string 的底层空间总大小时,reserver 不会改变容量大小

💻代码测试示例:

#include <iostream>
#include <string>
using namespace std;int main()
{string str("Hello World!");cout << "size:" << str.size() << endl;cout << "lenth:" << str.length() << endl;cout << "max_size:" << str.max_size() << endl;cout << "capacity:" << str.capacity() << endl;str.reserve(100);cout << "reserve:" << str.capacity() << endl;str.resize(17, '*');cout << "resize:" << str << endl;str.shrink_to_fit();cout << "shrink_to_fit:" << str.capacity() << endl;str.clear();cout << "clear:" << str << endl;cout << "empty:" << str.empty() << endl;return 0;
}

⌨️代码输出示例:

在这里插入图片描述

4.string类对象的迭代器

在这里插入图片描述

迭代器(Iterator)是一种强大的抽象概念,它提供了一种统一的方式来访问和操作容器(如 stringvector 等)中的元素,简单来说就是提供了另一种遍历修改数据的方法

函数名功能说明
begin + end迭代器:begin 获取开头一个字符 + end 获取最后一个字符下一个位置
rbegin + rend反向迭代器:rbegin 获取最后一个字符 + end 获取开头一个字符上一个位置
cbegin + cendbegin + end 一样,但是常量迭代器只读
crbegin + crendrbegin + rend 一样,但是反向常量迭代器只读

🔥值得注意的是: 定义开头变量前的类型,可以用 auto 代替自动推导,避免了很长的类型,比如后续学习 map 的迭代器类型是这样的 std::map< std::string,std::string >::iterator ,就很有必要用 auto

💻代码测试示例:

#include <iostream>
#include <string>
using namespace std;int main()
{string str("Hello World!");string::iterator it1 = str.begin();while (it1 != str.end()){cout << *it1 << ' ';it1++;}cout << endl;string::reverse_iterator it2 = str.rbegin();while (it2 != str.rend()){cout << *it2 << ' ';it2++;}cout << endl;return 0;
}

⌨️代码输出示例:

在这里插入图片描述

5.string类对象的元素访问

在这里插入图片描述

string 的元素访问提供了能够像数组那样自由访问字符串中的数组的函数,极大的提高了字符修改的效率

🔥值得注意的是: at 用于访问指定位置元素的成员函数。与 operator[ ] 不同的是,at 会进行边界检查,如果传入的索引超出容器的有效范围,会抛出 std::out_of_range 异常

函数名功能说明
operator[ ]像数组一样,使用方括号语法来访问其内部数据
at访问指定位置元素
back返回容器中最后一个元素的引用
front返回容器中第一个元素的引用

💻代码测试示例:

#include <iostream>
#include <string>
using namespace std;int main()
{string str("Hello World!");cout << "operator[ ]:" << str[11] << endl;cout << "at:" << str.at(10) << endl;cout << "back:" << (str.back() = '~') << ' ' << str << endl;cout << "front:" << (str.front() = 'h') << ' ' << str << endl;return 0;
}

⌨️代码输出示例:

在这里插入图片描述

6.string类对象的元素修改

在这里插入图片描述

string 还提供了 一系列像修改链表那样能够修改字符串的函数

函数名功能说明
operator+=字符串后追加字符串 str
append字符串后追加字符串 str
push_back字符串后尾插字符 c
assign将新的内容赋值给字符串
insert在容器的指定位置插入元素
erase从容器里移除指定的元素或元素范围
replace在容器或字符串中替换特定元素或子串
swap交换两个 string 对象的内容
pop_back移除 string 中的最后一个元素

🔥值得注意的是:

  1. string 尾部追加字符时,s.push_back(c) / s.append(1, c) / s += 'c' 三种的实现方式差不多,一般情况下 string 类的 += 操作用的比较多,+= 操作不仅可以连接单个字符,还可以连接字符串
  2. string 操作时,如果能够大概预估到放多少字符,可以先通过 reserve 把空间预留好

💻代码测试示例:

#include <iostream>
#include <string>
using namespace std;int main()
{string str;cout << "operator+=:" << (str += "hello") << endl;cout << "append:" << str.append(" world") << endl;str.push_back('!');cout << "push_back:" << str << endl;str.assign("new word");cout << "assign:" << str << endl;str.insert(8, "!!!");cout << "insert:" << str << endl;str.erase(8, 3);cout << "erase:" << str << endl;str.replace(0, 3, "fashion");cout << "replace:" << str << endl;string tmp("happy day!");swap(tmp, str);cout << "swap:" << str << endl;str.pop_back();cout << "pop_back:" << str << endl;return 0;
}

⌨️代码输出示例:

在这里插入图片描述

7.string类对象的查找、提取、对比

在这里插入图片描述

string 也提供了一些查找、提取、对比的函数分配器(allocator)是标准库中一个重要的组件,它将内存分配和对象构造分离,使得容器的内存管理更加灵活

函数名功能说明
c_str返回 C 格式字符串
data返回一个指向字符串内部字符数组的指针
get_allocator获取容器当前使用的分配器实例
copy将字符串的一部分复制到一个字符数组中
find在字符串中查找子字符串或字符第一次出现的位置
rfind在字符串中从后往前查找指定的子字符串或字符
find_first_of查找字符串中任意参数在另一个字符串中第一次出现的位置
find_last_of从后往前查找字符串中任意参数在另一个字符串中第一次出现的位置
find_first_not_of在字符串中查找第一个不在指定字符集中的字符
find_last_not_of从后往前在字符串中查找第一个不在指定字符集中的字符
substr从字符串中提取子字符串
compare对两个字符串进行比较

🔥值得注意的是:

  1. c_str() 返回的是一个 const char* 类型的指针,这意味着不能通过该指针修改其所指向的字符串内容
  2. C++11 开始,string::data()string::c_str() 的行为基本一致,都会返回一个以 '\0' 结尾的字符数组指针
  3. 对于 copy,目标字符数组必须有足够的空间来容纳要复制的字符,并且需要手动添加字符串结束符以形成有效的 C 风格字符串
  4. find系列没找到就返回npos
  5. 对于 compare,逐个比较,如果当前字符串小于比较对象,返回一个负整数;如果当前字符串等于比较对象,返回 0 ;如果当前字符串大于比较对象,返回一个正整数

💻代码测试示例:

#include <iostream>
#include <string>
#include <cstdio>
using namespace std;int main()
{string str("Hello World");const char* str1 = str.c_str();printf("c_str:%s\n", str1);const char* str2 = str.data();printf("data:%s\n", str2);char buffer[10];str.copy(buffer, 5, 0);buffer[5] = '\0';cout << "copy:" << buffer << endl;string subStr = "World";int pos1 = str.find(subStr);cout << "find:" << pos1 << endl;int pos2 = str.rfind('h');cout << "rfind:" << pos2 << endl;int pos3 = str.find_first_of(subStr);cout << "find_first_of:" << pos3 << endl;int pos4 = str.find_last_of(subStr);cout << "find_last_of:" << pos4 << endl;int pos5 = str.find_first_not_of(subStr);cout << "find_first_not_of:" << pos5 << endl;int pos6 = str.find_last_not_of(subStr);cout << "find_last_not_of:" << pos6 << endl;string Substr = str.substr(0, 5);cout << "substr:" << Substr << endl;cout << "compare:" << str.compare(subStr);return 0;
}

⌨️代码输出示例:

在这里插入图片描述

8.string类的非成员函数及npos

在这里插入图片描述

正是有了非成员函数,才能实现大小交换、自定义交换、输出输入等操作,npos 也提供了一种特殊表达方式

函数名功能说明
npos值为-1,表示查找操作失败或者某个位置不存在
operator+将两个字符串拼接
relational operators大小比较
swap交换两个 string 对象的内容
operator>>输入运算符重载
operator<<输出运算符重载
getline获取一行字符串

🔥值得注意的是:

  1. npos 值为 -1 ,被定义为 size_t 类型的最大值。-1 原码为 1000 ... 0001 ,补码则为1111 ... 1111 ,但赋给 size_t 时,符号位就用不了了,所以整个补码就为 size_t 能表示的最大值表示查找操作失败或者某个位置不存在
  2. stringoperator+ 尽量少用,因为传值返回,导致效率低
  3. 当使用 >> 读取字符串时,它会在遇到空白字符(如空格、制表符、换行符等)时停止读取;getline 函数会读取输入流中的一行文本,直到遇到换行符为止,也就是遇到空格不会停止

💻代码测试示例:

#include <iostream>
#include <string>
using namespace std;int main()
{string str1("Hello ");string str2("World");cout << "npos:" << str1.npos << endl;cout << "operator+:" << (str1 + str2) << endl;cout << "relational operators:" << (str1 < str2) << endl;swap(str1, str2);cout << "swap:" << str1 << " " << str2 << endl;return 0;
}

⌨️代码输出示例:

在这里插入图片描述


希望读者们多多三连支持

小编会继续更新

你们的鼓励就是我前进的动力!

请添加图片描述

相关文章:

C++效率掌握之STL库:string函数全解

文章目录 1.为什么要学习string&#xff1f;什么是string&#xff1f;2.string类对象的常见构造3.string类对象的容量操作4.string类对象的迭代器5.string类对象的元素访问6.string类对象的元素修改7.string类对象的查找、提取、对比8.string类的非成员函数及npos希望读者们多多…...

Linux命令运行原理及权限管理

目录 1.引言 2.shell命令以及运行原理 3.Linux权限 3.1Linux下的用户类型 3.2Linux权限管理 3.2.1文件访问者的分类&#xff08;人&#xff09; 3.2.2文件类型和访问权限&#xff08;事物属性&#xff09; 3.2.3文件权限值的表示方法 3.2.4文件访问权限的相关设置方法…...

linux内核源代码中__init的作用?

在 Linux 内核源代码中&#xff0c;__init是一个特殊的宏&#xff0c;用于标记在内核初始化阶段使用的变量或函数。这个宏的作用是告诉内核编译器和链接器&#xff0c;被标记的变量或函数只在内核的初始化阶段使用&#xff0c;在系统启动完成后就不再需要了。因此&#xff0c;这…...

系统学习算法:专题九 穷举vs暴搜vs深搜vs回溯vs剪枝

其中标题的深搜&#xff0c;回溯&#xff0c;剪枝我们之前专题都已经有过学习和了解&#xff0c;这里多了两个穷举和暴搜&#xff0c;其实意思都差不多&#xff0c;穷举就是穷尽力气将所有情况都列举出来&#xff0c;暴搜就是暴力地去一个一个情况搜索&#xff0c;所以就是全部…...

《深度洞察ICA:人工智能信号处理降维的独特利器》

在人工智能技术飞速发展的今天&#xff0c;信号处理作为关键环节&#xff0c;面临着数据维度不断攀升的挑战。高维信号数据虽蕴含丰富信息&#xff0c;但也给处理和分析带来诸多难题&#xff0c;如计算资源消耗大、分析复杂度高、模型易过拟合等。独立成分分析&#xff08;ICA&…...

FASTA 和 FASTQ 格式详解|SRA转fastq

FASTA 格式 FASTA 格式是一种用于存储序列信息的简单格式&#xff0c;广泛应用于核酸&#xff08;DNA/RNA&#xff09;和蛋白质序列的存储。它主要由两个部分组成&#xff1a; 描述行&#xff1a;以“>”符号开头&#xff0c;包含序列的描述信息&#xff0c;如名称、来源等…...

Docker使用指南(一)——镜像相关操作详解(实战案例教学,适合小白跟学)

目录 1.镜像名的组成 2.镜像操作相关命令 镜像常用命令总结&#xff1a; 1. docker images 2. docker rmi 3. docker pull 4. docker push 5. docker save 6. docker load 7. docker tag 8. docker build 9. docker history 10. docker inspect 11. docker prune…...

为何在Kubernetes容器中以root身份运行存在风险?

作者&#xff1a;马辛瓦西奥内克&#xff08;Marcin Wasiucionek&#xff09; 引言 在Kubernetes安全领域&#xff0c;一个常见的建议是让容器以非root用户身份运行。但是&#xff0c;在容器中以root身份运行&#xff0c;实际会带来哪些安全隐患呢&#xff1f;在Docker镜像和…...

【人工智能】多模态学习在Python中的应用:结合图像与文本数据的深度探索

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 多模态学习是人工智能领域的一个重要研究方向,旨在通过结合多种类型的数据(如图像、文本、音频等)来提高模型的性能。本文将深入探讨多模…...

以AI为翼:技术能力进阶的新路径

一、引言 1.1 研究背景与意义 在当今数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;已成为推动各领域发展的核心驱动力。从最初简单的算法模型到如今复杂的深度学习架构&#xff0c;AI 技术取得了令人瞩目的进步。自 20 世纪 50 年代人工智能概念提出以来&#x…...

使用 HTTP::Server::Simple 实现轻量级 HTTP 服务器

在Perl中&#xff0c;HTTP::Server::Simple 模块提供了一种轻量级的方式来实现HTTP服务器。该模块简单易用&#xff0c;适合快速开发和测试HTTP服务。本文将详细介绍如何使用 HTTP::Server::Simple 模块创建和配置一个轻量级HTTP服务器。 安装 HTTP::Server::Simple 首先&…...

Jenkins 触发构建的几种常见方式

为了实现自动化构建,Jenkins 提供了多种触发构建的方式。这些触发方式可以根据开发团队的需求来选择,使得构建过程更加灵活和高效。 1. 手动触发构建 手动触发构建是最简单的一种方式,通常用于开发人员或管理员手动启动构建任务。 步骤: 登录 Jenkins 后,进入某个项目(…...

算法基础--二分查找

模板 #include <iostream> #include <cstring> #include <algorithm> #include <unordered_map> /** 二分查找&#xff08;Binary Search&#xff09;是一种高效的查找算法&#xff0c;其时间复杂度为 o(logn) */ using namespace std;const int N …...

Vue 3 30天精进之旅:Day 14 - 项目实践

在前面的学习中&#xff0c;我们已经掌握了Vue 3的基础知识&#xff0c;包括其核心概念、Vue Router、Vuex&#xff0c;以及异步操作等。今天是一个重要的里程碑&#xff1a;我们将把这些知识整合到一个实际的项目中。通过项目实践&#xff0c;你将能够深入理解所学知识&#x…...

【Java基础-42.4】Java中的包装类对象默认值:深入解析与注意事项

在Java编程中&#xff0c;包装类&#xff08;Wrapper Classes&#xff09;是将基本数据类型&#xff08;如int、char等&#xff09;封装为对象的类。它们提供了更多的功能和灵活性&#xff0c;例如允许基本数据类型参与面向对象的操作&#xff08;如存储在集合中&#xff09;。…...

Linux进程概念

目录 一.进程 二.进程状态 三.环境变量 四.程序地址空间 五.Linux2.6内核进程调度队列 一.进程 基本概念 课本概念&#xff1a;程序的一个执行实例&#xff0c;正在执行的程序等内核观点&#xff1a;担当分配系统资源&#xff08;CPU时间&#xff0c;内存&#xff09;的…...

Linux的简单使用和部署4asszaaa0

一.部署 1 环境搭建方式主要有四种: 1. 直接安装在物理机上.但是Linux桌面使用起来非常不友好.所以不建议.[不推荐]. 2. 使用虚拟机软件,将Linux搭建在虚拟机上.但是由于当前的虚拟机软件(如VMWare之类的)存在⼀些bug,会导致环境上出现各种莫名其妙的问题比较折腾.[非常不推荐…...

人工智能专业术语详解(A)

人工智能不仅是指寻求如何替代人类的机器人或人类寻求自我挑战的游戏&#xff0c;更是指运用复杂的程序化数学&#xff0c;其结果与高质量的训练数据相结合&#xff0c;推动了我们在日常生活中所看到的技术进步。从无人驾驶汽车到寻找癌症的治疗方法&#xff0c;人工智能正在逐…...

深度学习 Pytorch 基础网络手动搭建与快速实现

为了方便后续练习的展开&#xff0c;我们尝试自己创建一个数据生成器&#xff0c;用于自主生成一些符合某些条件、具备某些特性的数据集。 导入相关的包 # 随机模块 import random# 绘图模块 import matplotlib as mpl import matplotlib.pyplot as plt# 导入numpy import nu…...

deepseek的对话风格

概述 deepseek的对话风格&#xff0c;比一般的模型的回答多了思考过程&#xff0c;这是它比较可爱的地方&#xff0c;模型的回答有了思考过程&#xff0c;对用户而言大模型的回答不完全是一个黑盒。 deepseek的对话风格 train_prompt_style """Below is an…...

Spring Security(maven项目) 3.0.2.9版本 --- 改

前言&#xff1a; 通过实践而发现真理&#xff0c;又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识&#xff0c;又从理性认识而能动地指导革命实践&#xff0c;改造主观世界和客观世界。实践、认识、再实践、再认识&#xff0c;这种形式&#xff0c;循环往…...

OpenAI新商标申请曝光:AI硬件、机器人、量子计算全线布局?

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

TVM调度原语完全指南:从入门到微架构级优化

调度原语 在TVM的抽象体系中&#xff0c;调度&#xff08;Schedule&#xff09;是对计算过程的时空重塑。每一个原语都是改变计算次序、数据流向或并行策略的手术刀。其核心作用可归纳为&#xff1a; 优化目标 max ⁡ ( 计算密度 内存延迟 指令开销 ) \text{优化目标} \max…...

AlexNet网络学习笔记(NIPS 2012)

题目:ImageNet Classification with Deep Convolutional Neural Networks 发文机构:多伦多大学 作者:Alex Krizhevsky,Ilya Sutskever,Geoffrey E. Hinton(人工智能教父,AI三巨头——杰弗里.辛顿(Geoffrey Hinton),约书亚.本吉奥(Yoshua Bengio)和扬.勒丘恩(Yan…...

Starrocks 对比 Clickhouse

极速查询的单表查询 StarRocks 在极速查询方面上做了很多&#xff0c;下面着重介绍四点&#xff1a; 1&#xff09;向量化执行&#xff1a;StarRocks 实现了从存储层到查询层的全面向量化执行&#xff0c;这是 StarRocks 速度优势的基础。向量化执行充分发挥了 CPU 的处理能力…...

C++实现一款功能丰富的通讯录管理系统

在学习编程的过程中&#xff0c;如何设计一个实用的项目是许多同学头疼的问题。如果你是一位正在学习C的同学&#xff0c;想通过实际项目巩固知识&#xff0c;那么这个通讯录管理系统绝对是一个理想的练手项目。在本文中&#xff0c;我将详细拆解代码逻辑&#xff0c;帮助你理解…...

动态规划之背包问题

文章目录 0-1 背包问题1. 二维动态规划实现&#xff08;0-1 背包&#xff09;&#xff1a;2. 一维动态规划实现&#xff08;0-1 背包&#xff09;&#xff1a; 完全背包问题1. 二维动态规划实现&#xff08;完全背包&#xff09;&#xff1a;2. 一维动态规划实现&#xff08;完…...

Linux抢占式内核:技术演进与源码解析

一、引言 Linux内核作为全球广泛使用的开源操作系统核心,其设计和实现一直是计算机科学领域的研究热点。从早期的非抢占式内核到2.6版本引入的抢占式内核,Linux在实时性和响应能力上取得了显著进步。本文将深入探讨Linux抢占式内核的引入背景、技术实现以及与非抢占式内核的…...

Rust语言进阶之文件处理:BufWriter用法实例(一百零四)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列【…...

EtherCAT主站IGH-- 30 -- IGH之master.h/c文件解析

EtherCAT主站IGH-- 30 -- IGH之master.h/c文件解析 0 预览一 该文件功能`master.c` 文件功能函数预览二 函数功能介绍`master.c` 中主要函数的作用1. `ec_master_init`2. `ec_master_clear`3. `ec_master_thread_start`4. `ec_master_thread_stop`5. `ec_master_enter_idle_pha…...

关于deepseek的一些普遍误读

最近deepseek成为全球最热门的话题&#xff0c;甚至没有之一&#xff0c;无论是北美&#xff0c;欧洲&#xff0c;各大IT巨头&#xff0c;各个投资机构&#xff0c;政府官员&#xff0c;乃至脱口秀演员&#xff0c;都在不断提及这个话题&#xff0c;而国内&#xff0c;自媒体也…...

刷题记录 动态规划-7: 63. 不同路径 II

题目&#xff1a;63. 不同路径 II 难度&#xff1a;中等 给定一个 m x n 的整数数组 grid。一个机器人初始位于 左上角&#xff08;即 grid[0][0]&#xff09;。机器人尝试移动到 右下角&#xff08;即 grid[m - 1][n - 1]&#xff09;。机器人每次只能向下或者向右移动一步。…...

7-2 拯救外星人

7-2 拯救外星人 你的外星人朋友不认得地球上的加减乘除符号&#xff0c;但是会算阶乘 —— 正整数 N 的阶乘记为 “N!”&#xff0c;是从 1 到 N 的连乘积。所以当他不知道“57”等于多少时&#xff0c;如果你告诉他等于“12!”&#xff0c;他就写出了“479001600”这个答案。…...

人工智能导论-第3章-知识点与学习笔记

参考教材3.2节的内容&#xff0c;介绍什么是自然演绎推理&#xff1b;解释“肯定后件”与“否定前件”两类错误的演绎推理是什么意义&#xff0c;给出具体例子加以阐述。参考教材3.3节的内容&#xff0c;介绍什么是文字&#xff08;literal&#xff09;&#xff1b;介绍什么是子…...

一个开源 GenBI AI 本地代理(确保本地数据安全),使数据驱动型团队能够与其数据进行互动,生成文本到 SQL、图表、电子表格、报告和 BI

一、GenBI AI 代理介绍&#xff08;文末提供下载&#xff09; github地址&#xff1a;https://github.com/Canner/WrenAI 本文信息图片均来源于github作者主页 在 Wren AI&#xff0c;我们的使命是通过生成式商业智能 &#xff08;GenBI&#xff09; 使组织能够无缝访问数据&…...

Java 大视界 -- Java 大数据在智能电网中的应用与发展趋势(71)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…...

c语言练习题【消息队列、共享内存、信号灯集】

练习1:消息队列 请使用消息队列实现2个终端之间互相聊天 #发送端 key_t key; int id;typedef struct Msgbuf{long channel;char buf[128];}msg_t;int main(int argc, const char *argv[]) {if (argc<2){printf("传入频道号\n");return 1;}keyftok("./ipc&q…...

力扣 295. 数据流的中位数

&#x1f517; https://leetcode.cn/problems/find-median-from-data-stream/ 题目 数据流中不断有数添加进来&#xff0c;add 表示添加数据&#xff0c;find 返回数据流中的中位数 思路 大根堆存储数据流中偏小的数据小根堆存储数据流中偏大的数据若当前的 num 比大根堆的…...

JavaScript原型链与继承:优化与扩展的深度探索

在 JavaScript 的世界里&#xff0c;万物皆对象&#xff0c;而每个对象都有一个与之关联的原型对象&#xff0c;这就构成了原型链的基础。原型链&#xff0c;简单来说&#xff0c;是一个由对象的原型相互连接形成的链式结构 。每个对象都有一个内部属性[[Prototype]]&#xff0…...

【建站】专栏目录

建站专栏的想法有很多&#xff0c;想写穷鬼如何快速低成本部署前后端项目让用户能访问到&#xff0c;如何将网站收录到百度&#xff0c;bing&#xff0c;google并优化seo让搜索引擎搜索到网站&#xff0c;想写如何把网站加入google广告或者接入stripe信用卡首款平台收款&#x…...

题目 1160: 出圈

题目描述 设有n个人围坐一圈并按顺时针方向从1到n编号&#xff0c;从第1个人开始进行1到m的报数&#xff0c;报数到第个m人&#xff0c;此人出圈&#xff0c;再从他的下一个人重新开始1到m的报数&#xff0c;如此进行下去直到所剩下一人为止。 输入格式 输入多行&#xff0c;每…...

Python小游戏29乒乓球

import pygame import sys # 初始化pygame pygame.init() # 屏幕大小 screen_width 800 screen_height 600 screen pygame.display.set_mode((screen_width, screen_height)) pygame.display.set_caption("打乒乓球") # 颜色定义 WHITE (255, 255, 255) BLACK (…...

力扣 【99. 恢复二叉搜索树】Java题解(二叉树的 Morris 遍历)

题目链接 Morris遍历 递归和迭代遍历&#xff0c;不管是前序中序还是后续&#xff0c;空间复杂度都是O(n)&#xff08;递归是因为隐式调用栈的开销&#xff09;。 而Morris遍历可以做到空间复杂度是O(1)。 思路就是节点的前序节点的右指针指向该节点&#xff0c;来保证可以通…...

CNN的各种知识点(一):卷积神经网络CNN通道数的理解!

卷积神经网络CNN通道数的理解&#xff01; 通道数的核心概念解析1. 通道数的本质 2. 单张灰度图的处理示例&#xff1a; 3. 批量输入的处理通道与批次的关系&#xff1a; 4. RGB三通道输入的处理计算过程&#xff1a;示例&#xff1a; 5. 通道数的实际意义6. 可视化理解(1) 单通…...

python-UnitTest框架笔记

UnitTest框架的基本使用方法 UnitTest框架介绍 框架&#xff1a;framework&#xff0c;为了解决一类事情的功能集合 UnitTest框架&#xff1a;是python自带的单元测试框架 自带的&#xff0c;可以直接使用&#xff0c;不需要格外安装 测试人员用来做自动化测试&#xff0c;作…...

书生大模型实战营3

文章目录 L0——入门岛git基础Git 是什么&#xff1f;Git 中的一些基本概念工作区、暂存区和 Git 仓库区文件状态分支主要功能 Git 平台介绍GitHubGitLabGitee Git 下载配置验证下载 Git配置 Git验证 Git配置 Git常用操作Git简易入门四部曲Git其他指令 闯关任务任务1: 破冰活动…...

在CentOS服务器上部署DeepSeek R1

在CentOS服务器上部署DeepSeek R1,并通过公网IP与其进行对话,可以按照以下步骤操作: 一、环境准备 系统要求: CentOS 8+(需支持AVX512指令集)。 硬件配置: GPU版本:NVIDIA驱动520+,CUDA 11.8+。 CPU版本:至少16核处理器,64GB内存。 存储空间:原始模型需要30GB,量…...

C++中常用的十大排序方法之4——希尔排序

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【&#x1f60a;///计算机爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于C中常用的排序方法之4——希尔排序的相…...

机器学习day7

自定义数据集 使用pytorch框架实现逻辑回归并保存模型&#xff0c;然后保存模型后再加载模型进行预测&#xff0c;对预测结果计算精确度和召回率及F1分数 代码 import numpy as np import torch import torch.nn as nn import torch.optim as optimizer import matplotlib.pyp…...

【流媒体】搭建流媒体服务器

搭建Windows Nginx服务器 搭建 下载nginx工具包解压至本地&#xff0c;并在cmd窗口中切换至nginx所在的本地目录修改 conf/nginx.conf 文件&#xff0c;更改其端口号 server中的 listen的端口号从 80改为 8080&#xff0c;因为80经常被其他服务占用&#xff0c;导致无法打开 …...