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

TinyXML2的一些用法

TinyXML2

      • 原始字符串字面量
    • TinyXML2
      • 1. XML文档操作
        • 1.1 LoadFile(const char* filename)
        • 1.2SaveFile(const char* filename)
        • 1.3RootElement()
        • 1.4Parse(const char* xml)
      • 2.元素操作
        • 2.1 FirstChildElement(const char* name = nullptr)
        • 2.2 NextSiblingElement(const char* name = nullptr)
        • 2.3 SetName(const char* name)
        • 2.4 DeleteChild(XMLElement* child)
      • 3. 属性操作
        • 3.1SetAttribute(const char* name, const char* value)
        • 3.2 Attribute(const char* name)
        • 3.3 DeleteAttribute(const char* name)
      • 4. 文本操作
        • 4.1 SetText(const char* text)
        • 4.2 GetText()
      • 5. 新建元素和节点
        • 5.1 NewElement(const char* name)
        • 5.2 InsertFirstChild(XMLNode* child)
        • 5.3 InsertEndChild(XMLNode* child)
      • 6. 错误处理
        • 6.1 ErrorID()
        • 6.2ErrorStr()
    • 附录:XML文件格式
      • 命名空间
      • 模式位置
      • 简单的XML文件
      • 复杂的XML文件

原始字符串字面量

  • 原始字符串字面量是 C++ 提供的一种字符串表示法,用来简化特殊字符的处理(例如换行符、反斜杠)和避免过多的转义字符。它的引入是为了让字符串更可读、更易于书写,尤其是涉及正则表达式、文件路径等场景。
  • 语法
原始字符串字面量以 R"delimiter(raw_characters)delimiter" 的形式表示:delimiter 是用户定义的分隔符,可以用任意字符,但不能包含空白字符或括号。
raw_characters 是原始字符串的内容,所有字符将被保留原样。
  • 特点
    • 支持多行字符串:原始字符串字面量可以直接包含换行符,而无需使用 \n。
    • 无需转义字符:在常规字符串中,特殊字符(如换行符 \n 或双引号 ")需要用反斜杠 \ 转义。
    • 灵活的分隔符:如果字符串中包含了 “)”,可以使用自定义分隔符避免冲突。
    std::string raw_str = R"delimiter(This is a raw string with ")".)delimiter";
    • 可嵌套引号:原始字符串字面量允许在字符串中直接包含双引号。
  • 使用方法同普通字符串一样。

TinyXML2

  1. TinyXML2 是一个轻量级的 XML 解析库,专为简单和快速设计,适合嵌入式系统、小型应用或需要解析/生成 XML 的程序。TinyXML2 的核心功能包括 XML 的读取、修改和写入。
  2. 跨平台:纯 C++ 编写,可在 Windows、Linux、macOS 等平台上使用。
  3. 无需外部依赖:仅需单个头文件和源文件(tinyxml2.h 和 tinyxml2.cpp)。

1. XML文档操作

1.1 LoadFile(const char* filename)

功能:将 XML 文档保存到文件。
参数:filename 是文件路径。
返回值:保存成功返回 XML_SUCCESS,否则返回错误码。

XMLDocument doc;//表示整个 XML 文件,负责加载、解析、保存。
if (doc.LoadFile("example.xml") != XML_SUCCESS) {std::cerr << "Failed to load XML file!" << std::endl;
}
1.2SaveFile(const char* filename)

功能:将 XML 文档保存到文件。
参数:filename 是文件路径。
返回值:保存成功返回 XML_SUCCESS,否则返回错误码。

if (doc.SaveFile("output.xml") != XML_SUCCESS) {std::cerr << "Failed to save XML file!" << std::endl;
}
1.3RootElement()

功能:获取 XML 文档的根元素。
返回值:指向根元素的指针,如果没有根元素返回 nullptr。

XMLElement* root = doc.RootElement();
if (!root) {std::cerr << "No root element found!" << std::endl;
} else {std::cout << "Root element: " << root->Name() << std::endl;
}
1.4Parse(const char* xml)

功能:直接解析 XML 字符串。
参数:xml 是一个 XML 格式的字符串。
返回值:解析成功返回 XML_SUCCESS,否则返回错误码。

const char* xml = "<Root><Child>Text</Child></Root>";
if (doc.Parse(xml) != XML_SUCCESS) {std::cerr << "Failed to parse XML string!" << std::endl;
}
示例// 1. 基本解析
XMLDocument doc;
// 解析简单的XML字符串
const char* xml = "<Root><Child>Hello</Child></Root>";
if (doc.Parse(xml) == XML_SUCCESS) {XMLElement* root = doc.FirstChildElement("Root");XMLElement* child = root->FirstChildElement("Child");const char* text = child->GetText();  // 获取 "Hello"
}// 2. 解析带属性的XML
const char* xmlWithAttr = R"(<Person id="1" name="John"><Age>30</Age><Address city="New York"><Street>Broadway</Street></Address></Person>
)";
if (doc.Parse(xmlWithAttr) == XML_SUCCESS) {XMLElement* person = doc.FirstChildElement("Person");const char* name = person->Attribute("name");  // 获取 "John"XMLElement* address = person->FirstChildElement("Address");const char* city = address->Attribute("city");  // 获取 "New York"
}// 3. 解析列表数据
const char* xmlList = R"(<Inventory><Item id="1" name="Apple" price="0.5"/><Item id="2" name="Banana" price="0.3"/><Item id="3" name="Orange" price="0.4"/></Inventory>
)";
class InventoryParser {
public:struct Item {int id;string name;double price;};static vector<Item> parseItems(const char* xml) {vector<Item> items;XMLDocument doc;if (doc.Parse(xml) == XML_SUCCESS) {XMLElement* inventory = doc.FirstChildElement("Inventory");for (XMLElement* elem = inventory->FirstChildElement("Item");elem != nullptr;elem = elem->NextSiblingElement("Item")) {Item item;item.id = elem->IntAttribute("id");item.name = elem->Attribute("name");item.price = elem->DoubleAttribute("price");items.push_back(item);}}return items;}
};// 4. 解析嵌套结构
const char* xmlNested = R"(<Company><Department name="Engineering"><Employee id="1"><Name>John Doe</Name><Position>Developer</Position><Skills><Skill>C++</Skill><Skill>Python</Skill></Skills></Employee></Department></Company>
)";
class CompanyParser {
public:static void parseEmployee(XMLElement* empElement) {string name = empElement->FirstChildElement("Name")->GetText();string position = empElement->FirstChildElement("Position")->GetText();vector<string> skills;XMLElement* skillsElem = empElement->FirstChildElement("Skills");for (XMLElement* skill = skillsElem->FirstChildElement("Skill");skill != nullptr;skill = skill->NextSiblingElement("Skill")) {skills.push_back(skill->GetText());}}
};// 5. 错误处理
class XMLParser {
public:static bool parseWithErrorHandling(const char* xml) {XMLDocument doc;XMLError err = doc.Parse(xml);switch (err) {case XML_SUCCESS:return true;case XML_ERROR_FILE_NOT_FOUND:cerr << "XML file not found!" << endl;break;case XML_ERROR_PARSING_ELEMENT:cerr << "Error parsing element!" << endl;break;case XML_ERROR_PARSING_ATTRIBUTE:cerr << "Error parsing attribute!" << endl;break;default:cerr << "Unknown XML error!" << endl;}return false;}
};// 6. 配置文件解析
const char* configXml = R"(<Config><Database><Host>localhost</Host><Port>3306</Port><Username>root</Username><Password>secret123</Password></Database><Server><Port>8080</Port><MaxConnections>100</MaxConnections></Server></Config>
)";
class ConfigParser {
public:struct DBConfig {string host;int port;string username;string password;};struct ServerConfig {int port;int maxConnections;};static pair<DBConfig, ServerConfig> parseConfig(const char* xml) {XMLDocument doc;DBConfig db;ServerConfig server;if (doc.Parse(xml) == XML_SUCCESS) {XMLElement* config = doc.FirstChildElement("Config");// 解析数据库配置XMLElement* dbElem = config->FirstChildElement("Database");db.host = dbElem->FirstChildElement("Host")->GetText();db.port = atoi(dbElem->FirstChildElement("Port")->GetText());db.username = dbElem->FirstChildElement("Username")->GetText();db.password = dbElem->FirstChildElement("Password")->GetText();// 解析服务器配置XMLElement* serverElem = config->FirstChildElement("Server");server.port = atoi(serverElem->FirstChildElement("Port")->GetText());server.maxConnections = atoi(serverElem->FirstChildElement("MaxConnections")->GetText());}return {db, server};}
};

2.元素操作

2.1 FirstChildElement(const char* name = nullptr)

功能:获取元素的第一个子元素。如果 name 参数不为空,则返回名称匹配的第一个子元素。
参数:name 是可选参数,表示子元素的名称。
返回值:指向第一个子元素的指针,如果没有找到返回 nullptr。

XMLElement* firstChild = root->FirstChildElement();
if (firstChild) {std::cout << "First child element: " << firstChild->Name() << std::endl;
}
2.2 NextSiblingElement(const char* name = nullptr)

功能:获取当前元素的下一个同级元素。如果 name 参数不为空,则返回名称匹配的下一个同级元素。
参数:name 是可选参数,表示同级元素的名称。
返回值:指向下一个同级元素的指针,如果没有找到返回 nullptr。

for (XMLElement* child = root->FirstChildElement(); child != nullptr; child = child->NextSiblingElement()) {std::cout << "Sibling element: " << child->Name() << std::endl;
}
2.3 SetName(const char* name)

功能:设置元素的名称。
参数:name 是新名称的字符串。

element->SetName("NewName");
2.4 DeleteChild(XMLElement* child)

功能:删除当前元素的指定子元素。
参数:child 是需要删除的子元素指针。

root->DeleteChild(child);

3. 属性操作

3.1SetAttribute(const char* name, const char* value)

功能:设置元素的字符串属性。
参数:name 是属性名,value 是属性值。

element->SetAttribute("key", "value");
3.2 Attribute(const char* name)

功能:获取元素指定名称的属性值。
参数:name 是属性名。
返回值:指向属性值的字符串指针,如果属性不存在返回 nullptr。

const char* attrValue = element->Attribute("key");
if (attrValue) {std::cout << "Attribute value: " << attrValue << std::endl;
}
3.3 DeleteAttribute(const char* name)

功能:删除元素指定名称的属性。
参数:name 是属性名。

element->DeleteAttribute("key");

4. 文本操作

4.1 SetText(const char* text)

功能:设置元素的文本内容。
参数:text 是字符串,表示要设置的文本内容。

element->SetText("This is text content");
4.2 GetText()

功能:获取元素的文本内容。
返回值:指向文本内容的字符串指针,如果没有文本内容返回 nullptr。

const char* text = element->GetText();
if (text) {std::cout << "Text content: " << text << std::endl;
}

5. 新建元素和节点

5.1 NewElement(const char* name)

功能:创建一个新的元素。
参数:name 是新元素的名称。
返回值:指向新创建的元素的指针。

XMLElement* newElement = doc.NewElement("NewElement");
5.2 InsertFirstChild(XMLNode* child)

功能:将一个子元素插入到当前元素的最前面。
参数:child 是要插入的子元素指针。

root->InsertFirstChild(newElement);
5.3 InsertEndChild(XMLNode* child)

功能:将一个子元素插入到当前元素的末尾。
参数:child 是要插入的子元素指针。

root->InsertEndChild(newElement);

6. 错误处理

6.1 ErrorID()

功能:返回文档的错误代码。

if (doc.ErrorID() != XML_SUCCESS) {std::cerr << "Error occurred: " << doc.ErrorID() << std::endl;
}
6.2ErrorStr()

功能:返回错误信息字符串。

if (doc.ErrorID() != XML_SUCCESS) {std::cerr << "Error details: " << doc.ErrorStr() << std::endl;
}

附录:XML文件格式

  1. XML的基本结构

    • 声明部分
      XML文件的开头是声明,表示XML的版本和编码格式
    <?xml version="1.0" encoding="UTF-8"?>
    • 根元素
      XML文件必须有且只有一个根元素,所有其他内容都嵌套在根元素中
    <root><!-- 子元素 -->
    </root>
    • 元素
      元素是XML的基本组成单位,通常由开始标签和结束标签组成
    <element>内容</element>
    
     - 可以嵌套子元素。- 可以携带属性
    
    <element attribute="value">内容</element>
     - 属性
    

    属性是描述元素的附加信息,格式为key=“value”

    <book id="1" author="Author Name">Book Title</book>
     - 注释
    

    注释用于添加说明性文字

    <!-- 这是一个注释 -->
    
     - 文本内容
    
    <name>张三</name>
  2. XML规则
    - 标签匹配
    标签匹配:每个开始标签必须有对应的结束标签

    <name>张三</name>

    单标签形式需要使用斜杠
    - 区分大小写
    XML区分大小写,例如和是不同的标签。
    - 属性值必须使用引号:可以是单引号或双引号

    <person gender="male"></person>
  3. 转义字符

特殊字符转义符示例代码输出效果
&&amp;<text>AT&amp;T</text><text>AT&T</text>
<&lt;<text>1 &lt; 2</text><text>1 < 2</text>
>&gt;<text>3 &gt; 2</text><text>3 > 2</text>
'&apos;<attribute value='John&apos;s book' /><attribute value='John's book' />
"&quot;<attribute value="He said &quot;Hello&quot;" /><attribute value="He said "Hello"" />

命名空间

  1. 由来
  • XML 中,标签名是自由定义的,不同的 XML 文档中可能会出现相同名称的标签。如果多个 XML 文件需要合并或扩展,很容易发生命名冲突。命名空间为标签和属性分配一个唯一的标识符,解决了冲突问题。
  • 命名空间实际上是一个唯一的 URI(Uniform Resource Identifier),通常是一个 URL(但不需要真实存在)。它标识某一组标签属于特定的上下文。
  1. 语法
  • 默认命名空间
<root xmlns="http://example.com/namespace"><child>Content</child>
</root>
<!--作用范围:没有前缀的所有标签(<root><child>)都属于这个命名空间。-->
  • 带前缀的命名空间
<root xmlns:ns="http://example.com/namespace"><ns:child>Content</ns:child>
</root>
<!--xmlns:ns="http://example.com/namespace" 声明了带前缀的命名空间-->
<!--标签 <ns:child> 使用了 ns 前缀,表示它属于命名空间 http://example.com/namespace-->
<!--作用范围:只有使用了 ns: 前缀的标签。-->
  • 解决的问题
<person xmlns:p="http://example.com/person"><p:name>John</p:name>
</person><product xmlns:prod="http://example.com/product"><prod:name>Smartphone</prod:name>
</product>

模式位置

简单的XML文件

<?xml version="1.0" encoding="UTF-8"?>
<!-- 这是一个简单的 XML 文件,描述书店中的书籍信息 -->
<bookstore><book id="1"><title>XML Basics</title><author>John Doe</author><price currency="USD">29.99</price></book><book id="2"><title>Learning XML</title><author>Jane Smith</author><price currency="EUR">39.99</price></book>
</bookstore>

复杂的XML文件

<?xml version="1.0" encoding="UTF-8"?>
<!-- 复杂 XML 文件,描述一个电子商务平台的订单信息 -->
<ecommerce xmlns="http://example.com/ecommerce" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://example.com/ecommerce ecommerce.xsd"><order id="1001" status="shipped"><customer><name>John Doe</name><email>john.doe@example.com</email><phone>+123456789</phone><address><street>123 Main St</street><city>Springfield</city><state>IL</state><zipcode>62704</zipcode><country>USA</country></address></customer><items><item id="p101"><name>Smartphone</name><quantity>1</quantity><price currency="USD">699.99</price></item><item id="p102"><name>Wireless Headphones</name><quantity>2</quantity><price currency="USD">59.99</price></item></items><payment><method>Credit Card</method><transaction_id>TX123456789</transaction_id><amount currency="USD">819.97</amount></payment><shipping><method>Express</method><tracking_number>EXP123456789</tracking_number><date>2024-11-25</date></shipping></order>
</ecommerce>

相关文章:

TinyXML2的一些用法

TinyXML2 原始字符串字面量 TinyXML21. XML文档操作1.1 LoadFile(const char* filename)1.2SaveFile(const char* filename)1.3RootElement()1.4Parse(const char* xml) 2.元素操作2.1 FirstChildElement(const char* name nullptr)2.2 NextSiblingElement(const char* name …...

【Vue3】从零开始创建一个VUE项目

【Vue3】从零开始创建一个VUE项目 手动创建VUE项目附录 package.json文件报错处理: Failed to get response from https://registry.npmjs.org/vue-cli-version-marker 相关链接&#xff1a; 【VUE3】【Naive UI】&#xff1c;NCard&#xff1e; 标签 【VUE3】【Naive UI】&…...

springboot370高校宣讲会管理系统(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 高校宣讲会管理系统设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c…...

navicat连接mysql 8.0以上版本2059错误

安装了最新版本8.0.4的mysql之后&#xff0c;使用navicat链接提示以下错误。原因是因为mysql8.0 之前的版本中加密规则是 mysql_native_password&#xff0c;而 mysql8.0 之后的版本加密规则是caching_sha2_password 处理方案 解决方案1&#xff1a;下载安装最新版本navicat…...

SQL优化与性能——C++与SQL性能优化

在开发高效的数据库应用程序时&#xff0c;性能优化至关重要&#xff0c;尤其是当系统规模逐渐扩大或并发请求增加时。数据库操作往往是应用程序性能的瓶颈所在&#xff0c;因此&#xff0c;在 C 应用程序中合理优化数据库操作&#xff0c;管理数据库连接池、使用批量插入与更新…...

AI高中数学教学视频生成技术:利用通义千问、MathGPT、视频多模态大模型,语音大模型,将4个模型融合 ,生成高中数学教学视频,并给出实施方案。

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下AI高中数学教学视频生成技术&#xff1a;利用通义千问、MathGPT、视频多模态大模型&#xff0c;语音大模型&#xff0c;将4个模型融合 &#xff0c;生成高中数学教学视频&#xff0c;并给出实施方案。本文利用专家模…...

vscode远程连接ssh

一. 使用vscode里的ssh查件连不上远程的解决方法 删除Windows上的known_host文件&#xff0c;该文件会在连接之后自动生成&#xff0c;用于验证远程服务器的身份。 konwn_host和id_rsa&#xff0c;id_rsa.pub的关系 &#xff08;1&#xff09;konwn_host用于客户端验证远程服务…...

学习ASP.NET Core的身份认证(基于Session的身份认证2)

基于Session的身份认证通过后&#xff0c;后续访问控制器的函数时该如何控制访问权限&#xff1f;虽然可以按上篇文章方式在需要做控制的函数开头检查Session的用户标识&#xff0c;可以写个全局通用检查类供所需函数调用&#xff0c;但还是有更简便的方法&#xff0c;本文学习…...

深度学习基本单元结构与输入输出维度解析

深度学习基本单元结构与输入输出维度解析 在深度学习领域&#xff0c;模型的设计和结构是理解其性能和应用的关键。本文将介绍深度学习中的基本单元结构&#xff0c;包括卷积神经网络&#xff08;CNN&#xff09;、反卷积&#xff08;转置卷积&#xff09;、循环神经网络&…...

playwright 学习复仇记-1 开端

前言 说到 web 自动化&#xff0c;大家最熟悉的就是 selenium 了&#xff0c;selenium 之后又出现了三个强势的框架Puppeteer、CyPress、TestCafe&#xff0c; 但这3个都需要掌握 JavaScript 语言&#xff0c;所以只是少部分人在用。 2020年微软开源一个 UI 自动化测试工具 Pl…...

从零开始使用GOT-OCR2.0——多模态OCR项目:微调数据集构建 + 训练(解决训练报错,成功实验微调训练)

在上一篇文章记录了GOT-OCR项目的环境配置和基于官方模型参数的基础使用。环境安装的博文快速链接&#xff1a; 从零开始使用GOT-OCR2.0——多模态通用型OCR&#xff08;非常具有潜力的开源OCR项目&#xff09;&#xff1a;项目环境安装配置 测试使用-CSDN博客 本章在环境配置…...

Rust学习笔记_10——守卫

Rust学习笔记_07——枚举和范围 Rust学习笔记_08——String Rust学习笔记_09——模式匹配 守卫 文章目录 守卫1. 介绍2. 基本用法3. 示例4. 复杂用法5. if let5.1 基本用法5.2 示例5.3 守卫与if let的区别与联系 1. 介绍 在Rust中&#xff0c;守卫&#xff08;guard&#xff…...

UE5 打包报错 Unknown structure 的解决方法

在虚幻引擎5.5 打包报错如下&#xff1a; UATHelper: 打包 (Windows): LogInit: Display: LogProperty: Error: FStructProperty::Serialize Loading: Property ‘StructProperty /Game/Components/HitReactionComponent/Blueprints/BI_ReactionInterface.BI_ReactionInterface…...

如何打开链接中的网址

文章目录 1 概念介绍2 使用方法3 示例代码我们在上一章回中介绍了包管理相关的内容,本章回中将介绍如何使用url_launcher包.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 我们在这里介绍url_launcher包主要用来打开Url中的内容,Url可以是电话号码,网址,邮箱等内容。如…...

React 前端框架4

六、React 中的事件处理 &#xff08;一&#xff09;绑定事件的方式 在 React 中&#xff0c;事件绑定和传统的 HTML 中的事件绑定有一些不同&#xff0c;它采用了驼峰命名法来命名事件名称&#xff0c;并且事件绑定的属性值是一个函数。例如&#xff0c;在 HTML 中绑定点击事…...

Neo4j启动时指定JDK版本

项目使用jdk1.8&#xff0c;同时需要安装neo4j5.15版本&#xff0c;使用jdk17. 1.mac或者liunx&#xff0c;找到neo4j目录bin的下neo4j文件 设置JAVA_HOME: 2.windows,找到bin下面的neo4j.bat文件 set "JAVA_HOME{JDK文件目录}" 重启后生效。...

【k8s深入理解之 Scheme 补充-2】理解 register.go 暴露的 AddToScheme 函数

AddToScheme 函数 AddToScheme 就是为了对外暴露&#xff0c;方便别人调用&#xff0c;将当前Group组的信息注册到其 Scheme 中&#xff0c;以便了解该 Group 组的数据结构&#xff0c;用于后续处理 项目版本用途使用场景k8s.io/apiV1注册资源某一外部版本数据结构&#xff0…...

TextBlob:简单高效的自然语言处理工具

TextBlob&#xff1a;简单高效的自然语言处理工具 TextBlob 是一个基于 NLTK 和 Pattern 的自然语言处理库&#xff0c;以简单易用著称。它提供了直观的 API&#xff0c;支持文本分析、情感分析、拼写纠正等常见任务&#xff0c;非常适合快速原型开发和学习。 为什么选择 Text…...

QT:将QTableWidget内容写入txt文件中

文章详请&#xff1a;最近在做手在眼上的标定&#xff0c;首先要采集机械臂数据和图像数据&#xff0c;我使用tablewidget进行机械臂数据的显示&#xff0c;最后的计算需要将机械臂位姿数据存储在txt文件中。 引用&#xff1a;Qt如何保存tableWidget数据&#xff1f;_qt table…...

每日十题八股-2024年12月2日

1.你知道有哪个框架用到NIO了吗&#xff1f; 2.有一个学生类&#xff0c;想按照分数排序&#xff0c;再按学号排序&#xff0c;应该怎么做&#xff1f; 3.Native方法解释一下 4.数组与集合区别&#xff0c;用过哪些&#xff1f; 5.说说Java中的集合&#xff1f; 6.Java中的线程…...

R语言森林生态系统结构、功能与稳定性分析与可视化实践高级应用

在生态学研究中&#xff0c;森林生态系统的结构、功能与稳定性是核心研究内容之一。这些方面不仅关系到森林动态变化和物种多样性&#xff0c;还直接影响森林提供的生态服务功能及其应对环境变化的能力。森林生态系统的结构主要包括物种组成、树种多样性、树木的空间分布与密度…...

RDMA驱动学习(三)- cq的创建

用户通过ibv_create_cq接口创建完成队列&#xff0c;函数原型和常见用法如下&#xff0c;本节以该用法为例看下cq的创建过程。 struct ibv_cq *ibv_create_cq(struct ibv_context *context, int cqe,void *cq_context,struct ibv_comp_channel *channel,int comp_vector); cq …...

Python-使用类和实例-Sun-Mon

9.2.1 Car类 class Car():"""概述车辆信息"""def __init__(self,make,model,year):"""初始化参数"""self.makemakeself.modelmodelself.yearyear //__init__方法会把依据Car类创建的实例传入的实参的值&#xff…...

【MIT-OS6.S081笔记0.5】xv6 gdb调试环境搭建

补充一下xv6 gdb调试环境的搭建&#xff0c;我这里装的是最新的15.2的gdb的版本。我下载的是下面的第二个xz后缀的文件&#xff1a; 配置最详细的步骤可以参考下面的文章&#xff1a; [MIT 6.S081] Lab 0: 实验配置, 调试及测试 这里记录一下踩过的一些报错&#xff1a; 文…...

vmware虚拟机移植

最近发现虚拟机的系统非常适合移植&#xff0c;接下来看一下具体的过程 复制vmdk 第一个重要的文件是保存vmdk&#xff0c;如果磁盘使用的是多个文件则最好进行合并一下&#xff08;用着用着会发现vmdk文件特别大&#xff0c;这是正常的&#xff0c;不要想着能压缩了&#xf…...

最大子数组和

给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组 是数组中的一个连续部分。 示例 1&#xff1a; 输入&#xff1a;nums [-2,1,-3,4,-1,2,1,-5,4] 输出&#xff…...

活着就好20241202

亲爱的朋友们&#xff0c;大家早上好&#xff01;今天是2024年12月2日&#xff0c;第49周的第一天&#xff0c;也是十二月的第二天&#xff0c;农历甲辰[龙]年十月三十。在这个全新月份的开始、阳光初升的清晨&#xff0c;愿第一缕阳光悄悄探进你的房间&#xff0c;带给你满满的…...

Scala的练习题(成绩计算)

//1.迭代器&#xff0c;跳过第一个元素 //2.把字符串转成数字 //3.如何判断一个正整数是否可以被三整除&#xff1f; &#xff08;123&#xff09; % 3 0 import wyyyy.Studentimport scala.collection.mutable.ListBuffer import scala.io.Sourcecase class Student(name: St…...

Docker中配置Mysql主从备份

Mysql配置主从备份 一、Docker中实现跨服务器主从备份二、配置步骤1.配置主库2.配置从库3.遇到问题3.其它使用到的命令 一、Docker中实现跨服务器主从备份 在 Docker 中配置 MySQL 主从备份主要通过 MySQL 主从复制实现 二、配置步骤 1.配置主库 # 进入mysql主库容器 docke…...

分布式通用计算——MapReduce(重点在shuffle 阶段)

图片均来源于B站&#xff1a;哈喽鹏程 面向批处理的分布式计算框架——MapReduce 1、Mapreduce 起源2、适用场景3、MapReduce 词频统计原理 1、Mapreduce 起源 2、适用场景 3、MapReduce 词频统计原理 map 阶段到reduce阶段&#xff0c;通过hash取模来实现reduce 。比如&…...

VMware三种网络模式(桥接、NAT模式、仅主机)模式说明

VMware三种网络模式&#xff08;桥接、NAT模式、仅主机&#xff09;模式说明 VMware 提供了三种主要的网络连接模式&#xff1a;桥接模式&#xff08;Bridged Mode&#xff09;、NAT模式&#xff08;Network Address Translation Mode&#xff09;和仅主机模式&#xff08;Hos…...

实习冲刺第三十八天

236.二叉树的最近公共祖先 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff0…...

[Linux] 信号(singal)详解(一)

标题&#xff1a;[Linux] 信号(singal)详解 水墨不写bug &#xff08;图片来源于网络&#xff09; 目录 一、认识信号 1、认识信号 2、信号特点 3、基本概念 二、信号的产生&#xff08;5种方式&#xff09; 三、信号的保存 正文开始&#xff1a; 一、认识信号 1、认识信…...

【设计模式系列】备忘录模式(十九)

目录 一、什么是备忘录模式 二、备忘录模式的角色 三、备忘录模式的典型应用场景 四、备忘录模式在Calendar中的应用 一、什么是备忘录模式 备忘录模式&#xff08;Memento Pattern&#xff09;是一种行为型设计模式&#xff0c;它允许在不暴露对象内部状态的情况下保存和恢…...

书生大模型实战营第4期——3.3 LMDeploy 量化部署实践

文章目录 1 基础任务2 配置LMDeploy环境2.1 环境搭建2.2 模型配置2.3 LMDeploy验证启动模型文件 3 LMDeploy与InternLM2.53.1 LMDeploy API部署InternLM2.53.1.1 启动API服务器3.1.2 以命令行形式连接API服务器3.1.3 以Gradio网页形式连接API服务器 3.2 LMDeploy Lite3.2.1 设置…...

11.28深度学习_bp算法

七、BP算法 多层神经网络的学习能力比单层网络强得多。想要训练多层网络&#xff0c;需要更强大的学习算法。误差反向传播算法&#xff08;Back Propagation&#xff09;是其中最杰出的代表&#xff0c;它是目前最成功的神经网络学习算法。现实任务使用神经网络时&#xff0c;…...

U盘文件夹变打不开的文件:深度解析、恢复策略与预防之道

一、U盘文件夹变打不开的文件现象解析 在日常使用U盘的过程中&#xff0c;我们时常会遇到这样的困扰&#xff1a;原本存储有序、可以轻松访问的文件夹&#xff0c;突然之间变成了无法打开的文件。这些文件通常以未知图标或乱码形式显示&#xff0c;双击或右键尝试打开时&#…...

软件工程中的需求分析流程详解

一、需求分析的定义 需求分析&#xff08;Requirements Analysis&#xff09;是指在软件开发过程中&#xff0c;通过与用户、相关人员的沟通与讨论&#xff0c;全面理解和确定软件需求的过程。需求分析的最终目标是清晰、准确地定义软件系统应具备的功能、性能、用户界面、约束…...

springboot369高校教师教研信息填报系统(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 题目&#xff1a;高校教师教研信息填报系统的设计与实现 摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c…...

Docker Buildx 与 CNB 多平台构建实践

一、Docker Buildx 功能介绍 docker buildx 是 Docker 提供的一个增强版构建工具&#xff0c;支持更强大的构建功能&#xff0c;特别是在构建多平台镜像和高效处理复杂 Docker 镜像方面。 1.1 主要功能 多平台构建支持 使用 docker buildx&#xff0c;可以在单台设备上构建…...

VBA字典与数组第二十一讲:文本转换为数组函数Split

《VBA数组与字典方案》教程&#xff08;10144533&#xff09;是我推出的第三套教程&#xff0c;目前已经是第二版修订了。这套教程定位于中级&#xff0c;字典是VBA的精华&#xff0c;我要求学员必学。7.1.3.9教程和手册掌握后&#xff0c;可以解决大多数工作中遇到的实际问题。…...

开源项目 - 人脸关键点检测 facial landmark 人脸关键点 (98个关键点)

开源项目 - 人脸关键点检测 facial landmark 人脸关键点 &#xff08;98个关键点&#xff09; 示例&#xff1a; ​​​​ 助力快速掌握数据集的信息和使用方式。 数据可以如此美好&#xff01;...

【Postgres_Python】使用python脚本批量导出PG数据库

示例代码说明&#xff1a; 有多个数据库需要导出为.sql格式&#xff0c;数据库名与sql文件名一致,读取的数据库名需要根据文件名进行拼接 import psycopg2 import subprocess import os folder_path D:/HQ/chongqing_20241112 # 获取文件夹下所有文件和文件夹的名称 filename…...

嵌入式Linux(SOC带GPU树莓派)无窗口系统下搭建 OpenGL ES + Qt 开发环境,并绘制旋转金字塔

树莓派无窗口系统下搭建 OpenGL ES Qt 开发环境&#xff0c;并绘制旋转金字塔 1. 安装 OpenGL ES 开发环境 运行以下命令安装所需的 OpenGL ES 开发工具和库&#xff1a; sudo apt install cmake mesa-utils libegl1-mesa-dev libgles2-mesa-dev libdrm-dev libgbm-dev2. 安…...

MySQL事物

目录 何谓事物&#xff1f; 何谓数据库事务? 并发事务带来了哪些问题? 脏读(Dirty read) 丢失修改(Lostto modify) 不可重复读(Unrepeatable read) 幻读(Phantom read) 不可重复读和幻读有什么区别? 并发事务的控制方式有哪些? SQL 标准定义了哪些事务隔离级别?…...

在 CentOS 上安装 Docker:构建容器化环境全攻略

一、引言 在当今的软件开发与运维领域&#xff0c;Docker 无疑是一颗璀璨的明星。它以轻量级虚拟化的卓越特性&#xff0c;为应用程序的打包、分发和管理开辟了崭新的高效便捷之路。无论是开发环境的快速搭建&#xff0c;还是生产环境的稳定部署&#xff0c;Docker 都展现出了…...

基于Spring Boot的宠物咖啡馆平台的设计与实现

私信我获取源码和万字论文&#xff0c;制作不易&#xff0c;感谢点赞支持。 基于Spring Boot的宠物咖啡馆平台的设计与实现 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了基于Spring Boot的宠物咖啡馆平台的设…...

JAVAWeb之javascript学习

1.js引入方式 1. 内嵌式&#xff1a;在head中&#xff0c;通过一对script标签引入JS代码&#xff1b;cript代码放置位置有一定的随意性&#xff0c;一般放在head标签中&#xff1b;2.引入外部js文件 在head中&#xff0c;通过一对script标签引入外部JS代码&#xff1b;注意&…...

电脑与优傲协作机器人(实体)的TCP通讯(操作记录)

目录 一、UR通信端口 二、电脑&#xff08;客户端&#xff09;连接协作机器人&#xff08;服务端&#xff09; 1.设置网络方法 2.检查设置 3.示教器切换远程控制&#xff08;注&#xff09; 4.客户端与协作机器人建立连接 5.连接测试 三、电脑&#xff08;服务端&#…...

C++初阶——动态内存管理

目录 1、C/C内存区域划分 2、C动态内存管理&#xff1a;malloc/calloc/realloc/free 3、C动态内存管理&#xff1a;new/delete 3.1 new/delete内置类型 3.2 new/delete自定义类型 4、operator new与operator delete函数 5、new和delete的实现原理 5.1 内置类型 5.2 自定…...