<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>技术 on LarGeoYos</title>
        <link>https://largeoyos.github.io/categories/%E6%8A%80%E6%9C%AF/</link>
        <description>Recent content in 技术 on LarGeoYos</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-CN</language>
        <lastBuildDate>Fri, 29 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://largeoyos.github.io/categories/%E6%8A%80%E6%9C%AF/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>C&#43;&#43; 中 std::min_element / std::max_element 用法详解</title>
            <link>https://largeoyos.github.io/post/min-max-element/</link>
            <pubDate>Fri, 29 May 2026 00:00:00 +0000</pubDate>
            <guid>https://largeoyos.github.io/post/min-max-element/</guid>
            <description>&lt;p&gt;&lt;code&gt;std::min_element&lt;/code&gt; 和 &lt;code&gt;std::max_element&lt;/code&gt; 是 &lt;code&gt;&amp;lt;algorithm&amp;gt;&lt;/code&gt; 头文件中用于在容器中查找最小/最大元素的函数模板。&lt;/p&gt;&#xA;&lt;h2 id=&#34;函数签名&#34;&gt;&lt;a href=&#34;#%e5%87%bd%e6%95%b0%e7%ad%be%e5%90%8d&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;函数签名&#xA;&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;ForwardIt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;ForwardIt&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;min_element&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ForwardIt&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;first&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ForwardIt&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;last&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;ForwardIt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Compare&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;ForwardIt&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;min_element&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ForwardIt&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;first&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ForwardIt&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;last&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Compare&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;comp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;ForwardIt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;ForwardIt&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;max_element&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ForwardIt&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;first&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ForwardIt&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;last&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;ForwardIt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Compare&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;ForwardIt&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;max_element&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ForwardIt&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;first&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ForwardIt&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;last&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Compare&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;comp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;返回指向最小/最大元素的&lt;strong&gt;迭代器&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;区间为 &lt;code&gt;[first, last)&lt;/code&gt;，即左闭右开&lt;/li&gt;&#xA;&lt;li&gt;如果区间为空，返回 &lt;code&gt;last&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;如果多个元素并列，返回&lt;strong&gt;第一个&lt;/strong&gt;遇到的最值&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;min_element--找最小值&#34;&gt;&lt;a href=&#34;#min_element--%e6%89%be%e6%9c%80%e5%b0%8f%e5%80%bc&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;min_element — 找最小值&#xA;&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;vector&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;algorithm&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vector&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;9&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;it&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;min_element&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;begin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;it&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;最小值: &amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;it&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;endl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;     &lt;span class=&#34;c1&#34;&gt;// 1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;位置: &amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;it&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;begin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;endl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 1（第一个 1）&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;max_element--找最大值&#34;&gt;&lt;a href=&#34;#max_element--%e6%89%be%e6%9c%80%e5%a4%a7%e5%80%bc&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;max_element — 找最大值&#xA;&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;it&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;max_element&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;begin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;it&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;最大值: &amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;it&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;endl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;         &lt;span class=&#34;c1&#34;&gt;// 9&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;位置: &amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;it&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;begin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;endl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 5&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;同时找最小和最大minmax_elementc11&#34;&gt;&lt;a href=&#34;#%e5%90%8c%e6%97%b6%e6%89%be%e6%9c%80%e5%b0%8f%e5%92%8c%e6%9c%80%e5%a4%a7minmax_elementc11&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;同时找最小和最大：minmax_element（C++11）&#xA;&lt;/h2&gt;&lt;p&gt;用 &lt;code&gt;minmax_element&lt;/code&gt; 一次遍历同时找到最小和最大，效率比分别调用两次更高：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;algorithm&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vector&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;9&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;min_it&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;max_it&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;minmax_element&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;begin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;最小值: &amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;min_it&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;endl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;   &lt;span class=&#34;c1&#34;&gt;// 1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;最大值: &amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;max_it&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;endl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;   &lt;span class=&#34;c1&#34;&gt;// 9&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;C++17 结构化绑定让写法更简洁。返回 &lt;code&gt;std::pair&lt;/code&gt;，&lt;code&gt;.first&lt;/code&gt; 是最小迭代器，&lt;code&gt;.second&lt;/code&gt; 是最大迭代器。&lt;/p&gt;&#xA;&lt;h2 id=&#34;自定义比较器&#34;&gt;&lt;a href=&#34;#%e8%87%aa%e5%ae%9a%e4%b9%89%e6%af%94%e8%be%83%e5%99%a8&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;自定义比较器&#xA;&lt;/h2&gt;&lt;p&gt;通过第三个参数传入自定义比较函数，实现按特定规则查找：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 按绝对值找最小&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vector&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;it&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;min_element&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;begin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;[](&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;abs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;abs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// *it == -1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 按字符串长度找最长&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vector&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;words&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;apple&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;banana&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;cherry&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;date&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;longest&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;max_element&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;words&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;begin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;words&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;[](&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// *longest == &amp;#34;banana&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：比较器应实现&lt;strong&gt;严格弱序&lt;/strong&gt;（strict weak ordering），即 &lt;code&gt;comp(a, b)&lt;/code&gt; 返回 &lt;code&gt;true&lt;/code&gt; 表示 &amp;ldquo;a 排在 b 前面&amp;rdquo;（a 比 b 更小）。&lt;/p&gt;&#xA;&lt;h2 id=&#34;普通数组也可以用&#34;&gt;&lt;a href=&#34;#%e6%99%ae%e9%80%9a%e6%95%b0%e7%bb%84%e4%b9%9f%e5%8f%af%e4%bb%a5%e7%94%a8&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;普通数组也可以用&#xA;&lt;/h2&gt;&lt;p&gt;迭代器接口使它们兼容 C 风格数组：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;arr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;9&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;size_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;sizeof&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;arr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;sizeof&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;arr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;min_it&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;min_element&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;arr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;arr&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;max_it&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;max_element&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;arr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;arr&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;最小值: &amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;min_it&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;endl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;最大值: &amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;max_it&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;endl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;min--max--minmax--比较两个值&#34;&gt;&lt;a href=&#34;#min--max--minmax--%e6%af%94%e8%be%83%e4%b8%a4%e4%b8%aa%e5%80%bc&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;min / max / minmax — 比较两个值&#xA;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;std::min&lt;/code&gt; 和 &lt;code&gt;std::max&lt;/code&gt; 用于&lt;strong&gt;两个值之间&lt;/strong&gt;的比较，与 &lt;code&gt;min_element&lt;/code&gt;/&lt;code&gt;max_element&lt;/code&gt;（&lt;strong&gt;区间&lt;/strong&gt;内查找）不同：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;smaller&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;min&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;   &lt;span class=&#34;c1&#34;&gt;// 3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;larger&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;max&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;   &lt;span class=&#34;c1&#34;&gt;// 5&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 带比较器的版本&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;abs_min&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;min&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[](&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;abs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;abs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;// 3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// C++11: minmax 返回 pair&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hi&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;minmax&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;// lo=3, hi=5&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;min_element-vs-min区别对照&#34;&gt;&lt;a href=&#34;#min_element-vs-min%e5%8c%ba%e5%88%ab%e5%af%b9%e7%85%a7&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;min_element vs min：区别对照&#xA;&lt;/h2&gt;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;函数&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;作用&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;参数&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;返回值&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;std::min(a, b)&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;两个值取较小&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;两个值&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;较小值的&lt;strong&gt;引用&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;std::min_element(first, last)&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;区间内找最小&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;迭代器范围&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;指向最小值的&lt;strong&gt;迭代器&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;常见陷阱&#34;&gt;&lt;a href=&#34;#%e5%b8%b8%e8%a7%81%e9%99%b7%e9%98%b1&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;常见陷阱&#xA;&lt;/h2&gt;&lt;h3 id=&#34;区间为空&#34;&gt;&lt;a href=&#34;#%e5%8c%ba%e9%97%b4%e4%b8%ba%e7%a9%ba&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;区间为空&#xA;&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vector&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;empty&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;it&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;min_element&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;empty&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;begin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;empty&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;it&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;empty&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 必须检查，否则解引用空迭代器是未定义行为&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;误用-end-而非-begin&#34;&gt;&lt;a href=&#34;#%e8%af%af%e7%94%a8-end-%e8%80%8c%e9%9d%9e-begin&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;误用 end() 而非 begin()&#xA;&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;it&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;min_element&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;begin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;// 错误！first &amp;gt; last，未定义行为&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;比较器不满足严格弱序&#34;&gt;&lt;a href=&#34;#%e6%af%94%e8%be%83%e5%99%a8%e4%b8%8d%e6%bb%a1%e8%b6%b3%e4%b8%a5%e6%a0%bc%e5%bc%b1%e5%ba%8f&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;比较器不满足严格弱序&#xA;&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 错误：缺了相等情况的处理&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;min_element&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;begin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[](&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 正确&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;min_element&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;begin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[](&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;xx-总结&#34;&gt;&lt;a href=&#34;#xx-%e6%80%bb%e7%bb%93&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;XX 总结&#xA;&lt;/h2&gt;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;函数&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;用途&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;头文件&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;min_element&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;区间内找最小值&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;&amp;lt;algorithm&amp;gt;&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;max_element&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;区间内找最大值&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;&amp;lt;algorithm&amp;gt;&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;minmax_element&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;区间内同时找最小和最大&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;&amp;lt;algorithm&amp;gt;&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;min&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;两个值取较小&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;&amp;lt;algorithm&amp;gt;&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;max&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;两个值取较大&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;&amp;lt;algorithm&amp;gt;&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;minmax&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;两个值同时取较小和较大&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;&amp;lt;algorithm&amp;gt;&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;记住：&lt;code&gt;min_element&lt;/code&gt; / &lt;code&gt;max_element&lt;/code&gt; 返回&lt;strong&gt;迭代器&lt;/strong&gt;（需要解引用），&lt;code&gt;min&lt;/code&gt; / &lt;code&gt;max&lt;/code&gt; 返回&lt;strong&gt;引用&lt;/strong&gt;（直接使用）。区间为空时必须检查返回值是否等于 &lt;code&gt;last&lt;/code&gt;。&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>C&#43;&#43; 中 std::string::npos 详解</title>
            <link>https://largeoyos.github.io/post/string-npos/</link>
            <pubDate>Fri, 29 May 2026 00:00:00 +0000</pubDate>
            <guid>https://largeoyos.github.io/post/string-npos/</guid>
            <description>&lt;p&gt;&lt;code&gt;std::string::npos&lt;/code&gt; 是 C++ 标准库中 &lt;code&gt;std::string&lt;/code&gt; 类的一个静态常量，常用于字符串查找操作的结果判断。&lt;/p&gt;&#xA;&lt;h2 id=&#34;定义与值&#34;&gt;&lt;a href=&#34;#%e5%ae%9a%e4%b9%89%e4%b8%8e%e5%80%bc&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;定义与值&#xA;&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;static&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size_type&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;npos&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;类型是 &lt;code&gt;std::string::size_type&lt;/code&gt;（通常是 &lt;code&gt;size_t&lt;/code&gt;）&lt;/li&gt;&#xA;&lt;li&gt;值为 &lt;code&gt;size_t(-1)&lt;/code&gt;，即无符号整数的最大值&#xA;&lt;ul&gt;&#xA;&lt;li&gt;32 位系统上为 &lt;code&gt;4294967295&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;64 位系统上为 &lt;code&gt;18446744073709551615&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;主要用途查找失败判断&#34;&gt;&lt;a href=&#34;#%e4%b8%bb%e8%a6%81%e7%94%a8%e9%80%94%e6%9f%a5%e6%89%be%e5%a4%b1%e8%b4%a5%e5%88%a4%e6%96%ad&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;主要用途：查找失败判断&#xA;&lt;/h2&gt;&lt;p&gt;最常见的用法是作为 &lt;code&gt;find()&lt;/code&gt;、&lt;code&gt;rfind()&lt;/code&gt;、&lt;code&gt;find_first_of()&lt;/code&gt; 等查找函数的&lt;strong&gt;返回值&lt;/strong&gt;，表示&amp;quot;未找到&amp;quot;：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;string&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;hello world&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;size_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pos&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;find&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;xyz&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pos&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;npos&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;未找到匹配子串&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;endl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;禁忌不要用-int-接收返回值&#34;&gt;&lt;a href=&#34;#%e7%a6%81%e5%bf%8c%e4%b8%8d%e8%a6%81%e7%94%a8-int-%e6%8e%a5%e6%94%b6%e8%bf%94%e5%9b%9e%e5%80%bc&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;禁忌：不要用 int 接收返回值&#xA;&lt;/h2&gt;&lt;p&gt;一个常见陷阱是用 &lt;code&gt;int&lt;/code&gt; 而非 &lt;code&gt;size_t&lt;/code&gt; 接收 &lt;code&gt;find()&lt;/code&gt; 的返回值：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 错误示例&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pos&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;find&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;xyz&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;     &lt;span class=&#34;c1&#34;&gt;// int 无法表示 npos 的全部值域&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pos&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;npos&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 64 位下可能永远为 false&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;因为 &lt;code&gt;npos&lt;/code&gt; 在 64 位系统上是 &lt;code&gt;18446744073709551615&lt;/code&gt;，而 &lt;code&gt;int&lt;/code&gt; 最大值只有 &lt;code&gt;2147483647&lt;/code&gt;，转换后会截断，导致永远不等于 &lt;code&gt;npos&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;正确做法&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;size_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pos&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;find&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;xyz&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;// 使用正确的类型&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pos&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;npos&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 处理未找到&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;也可以使用 C++17 的 &lt;code&gt;auto&lt;/code&gt;：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pos&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;find&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;xyz&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pos&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;npos&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;...&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;find--rfind-详解&#34;&gt;&lt;a href=&#34;#find--rfind-%e8%af%a6%e8%a7%a3&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;find / rfind 详解&#xA;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;find&lt;/code&gt; 和 &lt;code&gt;rfind&lt;/code&gt; 是最常用的两个字符串查找成员函数，都返回匹配位置或 &lt;code&gt;npos&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;h3 id=&#34;find--从前往后找&#34;&gt;&lt;a href=&#34;#find--%e4%bb%8e%e5%89%8d%e5%be%80%e5%90%8e%e6%89%be&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;find — 从前往后找&#xA;&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;size_type&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;find&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size_type&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pos&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;size_type&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;find&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size_type&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pos&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;size_type&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;find&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size_type&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pos&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size_type&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;// 查找 s 的前 n 个字符&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;size_type&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;find&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size_type&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pos&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;第二个参数 &lt;code&gt;pos&lt;/code&gt; 指定从哪个位置开始搜索：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;hello world, hello again&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;p1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;find&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;hello&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;        &lt;span class=&#34;c1&#34;&gt;// 从 0 开始 → 0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;p2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;find&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;hello&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;     &lt;span class=&#34;c1&#34;&gt;// 从下标 1 开始 → 13（第二个 hello）&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;p3&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;find&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;world&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;        &lt;span class=&#34;c1&#34;&gt;// → 6&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;p4&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;find&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;xyz&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;          &lt;span class=&#34;c1&#34;&gt;// → npos&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;rfind--从后往前找&#34;&gt;&lt;a href=&#34;#rfind--%e4%bb%8e%e5%90%8e%e5%be%80%e5%89%8d%e6%89%be&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;rfind — 从后往前找&#xA;&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;size_type&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;rfind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size_type&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pos&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;npos&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;size_type&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;rfind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size_type&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pos&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;npos&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;size_type&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;rfind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size_type&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pos&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size_type&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;size_type&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;rfind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size_type&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pos&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;npos&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;pos&lt;/code&gt; 默认是 &lt;code&gt;npos&lt;/code&gt;（从末尾开始找），返回最后一次出现的位置：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;hello world, hello again&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;p1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rfind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;hello&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;            &lt;span class=&#34;c1&#34;&gt;// → 13（最后一个 hello）&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;p2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rfind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;hello&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;        &lt;span class=&#34;c1&#34;&gt;// 在下标 12 之前找 → 0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;p3&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rfind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;world&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;            &lt;span class=&#34;c1&#34;&gt;// → 6&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;p4&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rfind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;xyz&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;              &lt;span class=&#34;c1&#34;&gt;// → npos&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;典型模式提取文件扩展名&#34;&gt;&lt;a href=&#34;#%e5%85%b8%e5%9e%8b%e6%a8%a1%e5%bc%8f%e6%8f%90%e5%8f%96%e6%96%87%e4%bb%b6%e6%89%a9%e5%b1%95%e5%90%8d&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;典型模式：提取文件扩展名&#xA;&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;filename&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;example.tar.gz&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dot&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;filename&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rfind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sc&#34;&gt;&amp;#39;.&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dot&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;npos&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ext&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;filename&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;substr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;   &lt;span class=&#34;c1&#34;&gt;// &amp;#34;.gz&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;用 &lt;code&gt;rfind&lt;/code&gt; 而非 &lt;code&gt;find&lt;/code&gt; 能正确取到最后一个 &lt;code&gt;.&lt;/code&gt;，避免误取中间的扩展名。&lt;/p&gt;&#xA;&lt;h3 id=&#34;find_first_of--find_last_of--查找字符集合&#34;&gt;&lt;a href=&#34;#find_first_of--find_last_of--%e6%9f%a5%e6%89%be%e5%ad%97%e7%ac%a6%e9%9b%86%e5%90%88&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;find_first_of / find_last_of — 查找字符集合&#xA;&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;hello:world-example&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;p1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;find_first_of&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;:-&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;    &lt;span class=&#34;c1&#34;&gt;// → 5（第一个 &amp;#39;:&amp;#39;）&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;p2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;find_last_of&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;:-&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;     &lt;span class=&#34;c1&#34;&gt;// → 11（最后一个 &amp;#39;-&amp;#39;）&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;其他相关用法&#34;&gt;&lt;a href=&#34;#%e5%85%b6%e4%bb%96%e7%9b%b8%e5%85%b3%e7%94%a8%e6%b3%95&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;其他相关用法&#xA;&lt;/h2&gt;&lt;h3 id=&#34;作为参数表示直到末尾&#34;&gt;&lt;a href=&#34;#%e4%bd%9c%e4%b8%ba%e5%8f%82%e6%95%b0%e8%a1%a8%e7%a4%ba%e7%9b%b4%e5%88%b0%e6%9c%ab%e5%b0%be&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;作为参数表示&amp;quot;直到末尾&amp;quot;&#xA;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;std::string&lt;/code&gt; 的部分成员函数用 &lt;code&gt;npos&lt;/code&gt; 表示&amp;quot;剩余全部内容&amp;quot;：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;hello world&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sub&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;substr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;          &lt;span class=&#34;c1&#34;&gt;// 从 pos 6 到末尾 → &amp;#34;world&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sub2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;substr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;      &lt;span class=&#34;c1&#34;&gt;// 从 pos 6 取 5 个字符 → &amp;#34;world&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sub3&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;substr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;npos&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 显式表示到末尾 → &amp;#34;world&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;erase-配合-npos&#34;&gt;&lt;a href=&#34;#erase-%e9%85%8d%e5%90%88-npos&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;erase 配合 npos&#xA;&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;erase&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;npos&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 删除从 pos 5 到末尾的所有字符&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;延伸vector-也有-npos-吗&#34;&gt;&lt;a href=&#34;#%e5%bb%b6%e4%bc%b8vector-%e4%b9%9f%e6%9c%89-npos-%e5%90%97&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;延伸：vector 也有 npos 吗？&#xA;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;std::vector&lt;/code&gt; 没有 &lt;code&gt;npos&lt;/code&gt; 成员，因为 &lt;code&gt;vector&lt;/code&gt; 没有 &lt;code&gt;find()&lt;/code&gt; 成员函数（需用 &lt;code&gt;&amp;lt;algorithm&amp;gt;&lt;/code&gt; 的 &lt;code&gt;std::find&lt;/code&gt;）。&lt;code&gt;npos&lt;/code&gt; 是 &lt;code&gt;std::basic_string&lt;/code&gt; 及其特化（&lt;code&gt;string&lt;/code&gt;、&lt;code&gt;wstring&lt;/code&gt;、&lt;code&gt;u8string&lt;/code&gt; 等）特有的。&lt;/p&gt;&#xA;&lt;h2 id=&#34;总结&#34;&gt;&lt;a href=&#34;#%e6%80%bb%e7%bb%93&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;总结&#xA;&lt;/h2&gt;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;要点&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;说明&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;值&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;size_t(-1)&lt;/code&gt;，即无符号整型最大值&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;类型&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;std::string::size_type&lt;/code&gt;（通常为 &lt;code&gt;size_t&lt;/code&gt;）&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;用途&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;字符串查找失败返回值&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;find&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;从前往后找，&lt;code&gt;pos&lt;/code&gt; 参数指定起始位置&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;rfind&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;从后往前找，&lt;code&gt;pos&lt;/code&gt; 参数指定搜索截止位置&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;find_first_of&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;查找字符集合中任一字符首次出现的位置&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;find_last_of&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;查找字符集合中任一字符最后出现的位置&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;坑&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;不要用 &lt;code&gt;int&lt;/code&gt; 接收查找结果&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;适用&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;std::string&lt;/code&gt; 及所有 &lt;code&gt;std::basic_string&lt;/code&gt; 特化&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;</description>
        </item><item>
            <title>🐛 C语言中结构体自引用报错原因分析</title>
            <link>https://largeoyos.github.io/post/c-struct-typedef/</link>
            <pubDate>Tue, 28 Apr 2026 00:00:00 +0000</pubDate>
            <guid>https://largeoyos.github.io/post/c-struct-typedef/</guid>
            <description>&lt;p&gt;在 C 语言的数据结构学习中，我们往往会定义带有自身指针的结构体（例如链表的节点）。但如果写成下面这样的代码，编译器就会报错：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;typedef&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;BiTree&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BiQNode&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;next&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BiQNode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;报错原因分析&#34;&gt;&lt;a href=&#34;#%e6%8a%a5%e9%94%99%e5%8e%9f%e5%9b%a0%e5%88%86%e6%9e%90&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;报错原因分析&#xA;&lt;/h2&gt;&lt;p&gt;在 C 语言中，编译器的解析顺序是严格从上到下的，这就导致了上述代码存在两个致命问题：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;别名尚未定义&lt;/strong&gt;：当解析到 &lt;code&gt;struct BiQNode *next;&lt;/code&gt; 这一行时，编译器还不知道 &lt;code&gt;BiQNode&lt;/code&gt; 是什么。因为作为类型的别名，&lt;code&gt;BiQNode&lt;/code&gt; 要等到最后一行大括号结束时才会被完整定义。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;标签 (Tag) 不存在&lt;/strong&gt;：上面的代码省略了 &lt;code&gt;struct&lt;/code&gt; 后面的标签名。对于编译器而言，&lt;code&gt;struct BiQNode&lt;/code&gt; 是一个完全陌生、从未见过的类型，因此无法通过编译。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;正确的写法&#34;&gt;&lt;a href=&#34;#%e6%ad%a3%e7%a1%ae%e7%9a%84%e5%86%99%e6%b3%95&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;正确的写法&#xA;&lt;/h2&gt;&lt;p&gt;如果你需要定义包含自身类型指针的结构体（例如链表节点），你&lt;strong&gt;必须&lt;/strong&gt;给结构体起一个“标签名（Tag）”，或者提前声明别名。以下提供两种标准的解决方案。&lt;/p&gt;&#xA;&lt;h3 id=&#34;方案-a最稳妥的教科书写法推荐&#34;&gt;&lt;a href=&#34;#%e6%96%b9%e6%a1%88-a%e6%9c%80%e7%a8%b3%e5%a6%a5%e7%9a%84%e6%95%99%e7%a7%91%e4%b9%a6%e5%86%99%e6%b3%95%e6%8e%a8%e8%8d%90&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;方案 A：最稳妥的教科书写法（推荐）&#xA;&lt;/h3&gt;&lt;p&gt;这是最常见、也最不容易出错的写法。我们同时指定标签名和别名，都叫 &lt;code&gt;BiQNode&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;typedef&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BiQNode&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;BiTree&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BiQNode&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;next&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 这里必须使用带标签名的完整形式 struct BiQNode&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BiQNode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 此时定义了别名 BiQNode&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;方案-b先定义别名再定义结构体&#34;&gt;&lt;a href=&#34;#%e6%96%b9%e6%a1%88-b%e5%85%88%e5%ae%9a%e4%b9%89%e5%88%ab%e5%90%8d%e5%86%8d%e5%ae%9a%e4%b9%89%e7%bb%93%e6%9e%84%e4%bd%93&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;方案 B：先定义别名，再定义结构体&#xA;&lt;/h3&gt;&lt;p&gt;这种写法在一些大型 C 语言工程（例如 Linux 内核或部分高级开源库）中比较常见，逻辑上非常清晰：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;typedef&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BiQNode&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BiQNode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 先向编译器声明，BiQNode 是 struct BiQNode 的别名&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BiQNode&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;BiTree&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;BiQNode&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;next&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 因为前文已经声明了别名，这里可以直接使用 BiQNode，不需要加 struct&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;总结&lt;/strong&gt;：在 C 中，&lt;code&gt;typedef&lt;/code&gt; 只是给已有类型起了个新名字，并不能创造出魔法。当你要在定义结构体内部引用自己时，务必保证这个类型在解析到引用那一行时是&lt;strong&gt;可见且已知的&lt;/strong&gt;。&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>🛠️ VSCode 多文件 CMake 编译方法</title>
            <link>https://largeoyos.github.io/post/vscode-cmake/</link>
            <pubDate>Tue, 28 Apr 2026 00:00:00 +0000</pubDate>
            <guid>https://largeoyos.github.io/post/vscode-cmake/</guid>
            <description>&lt;h2 id=&#34;必备插件&#34;&gt;&lt;a href=&#34;#%e5%bf%85%e5%a4%87%e6%8f%92%e4%bb%b6&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;必备插件&#xA;&lt;/h2&gt;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;插件&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;来源&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;C/C++&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Microsoft&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;CMake Tools&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Microsoft&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;四步上手&#34;&gt;&lt;a href=&#34;#%e5%9b%9b%e6%ad%a5%e4%b8%8a%e6%89%8b&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;四步上手&#xA;&lt;/h2&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&#xA;① Ctrl+Shift+P → CMake: Select a Kit   → 选编译器&#xA;&#xA;② 点击底部 &amp;#34;CMake: [Debug]: Ready&amp;#34;     → Configure（生成 build）&#xA;&#xA;③ F7                                      → Build&#xA;&#xA;④ 点击 ▶ 或 Ctrl+F5                       → Run / Debug&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;&#xA;&lt;h2 id=&#34;cmakeliststxt-最佳实践&#34;&gt;&lt;a href=&#34;#cmakeliststxt-%e6%9c%80%e4%bd%b3%e5%ae%9e%e8%b7%b5&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;CMakeLists.txt 最佳实践&#xA;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;推荐写法：&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cmake&#34; data-lang=&#34;cmake&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;add_library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;lib_linklist&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;STATIC&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;LinkList/LinkList.cpp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;target_include_directories&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;lib_linklist&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;PUBLIC&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;LinkList&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;避免使用全局 &lt;code&gt;include_directories()&lt;/code&gt;，改用 &lt;code&gt;target_include_directories()&lt;/code&gt; 让每个库管理自己的头文件路径。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;常见问题&#34;&gt;&lt;a href=&#34;#%e5%b8%b8%e8%a7%81%e9%97%ae%e9%a2%98&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;常见问题&#xA;&lt;/h2&gt;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;问题&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;解决&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;找不到头文件&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;底部栏选对 Configuration，或改 &lt;code&gt;c_cpp_properties.json&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;找不到编译器&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;确认 MinGW/GCC/Clang 已加入 &lt;code&gt;PATH&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;No kit selected&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;先执行 Select a Kit&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;build 混乱&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;rm -rf build&lt;/code&gt;，重新 Configure&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;快捷键&#34;&gt;&lt;a href=&#34;#%e5%bf%ab%e6%8d%b7%e9%94%ae&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;快捷键&#xA;&lt;/h2&gt;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;操作&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;快捷键&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;构建&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;F7&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;运行&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;Ctrl+Shift+P&lt;/code&gt; → Run Without Debugging&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;调试&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;Ctrl+F5&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;选择 Kit&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;Ctrl+Shift+P&lt;/code&gt; → CMake: Select a Kit&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;hr&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;&lt;strong&gt;编译产物位置：&lt;/strong&gt; &lt;code&gt;build/&lt;/code&gt; 目录（&lt;code&gt;.exe&lt;/code&gt;、&lt;code&gt;.a&lt;/code&gt; 库文件都在这）&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;</description>
        </item><item>
            <title>🐧 Linux 常用命令与知识备忘</title>
            <link>https://largeoyos.github.io/post/linux/</link>
            <pubDate>Sat, 25 Apr 2026 00:00:00 +0000</pubDate>
            <guid>https://largeoyos.github.io/post/linux/</guid>
            <description>&lt;ul&gt;&#xA;&lt;li&gt;可以通过:man 指令名 来⾃⾏了解指令语法&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;1nano&#34;&gt;&lt;a href=&#34;#1nano&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;1.nano&#xA;&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;nano  hello.c&#xA;&#x9;完成程序&#xA;&#x9;Ctrl+O保存&#xA;&#x9;Enter确认文件名&#xA;&#x9;Ctrl+X退出nano&#xA;gcc hello.c -o hello 编译&#xA;./hello运行&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h4 id=&#34;2文件目录篇&#34;&gt;&lt;a href=&#34;#2%e6%96%87%e4%bb%b6%e7%9b%ae%e5%bd%95%e7%af%87&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;2.文件目录篇&#xA;&lt;/h4&gt;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;以根⽬录算起的绝对路径以 /开头，以家⽬录算起的绝对路径以 ~开头，相对路径不需要 /或 ～开头。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;举例：⼀个名为ustc的⽤⼾在他的家⽬录下创建了⼀个名为os的⽬录，在os⽬录下⾯⼜创建了⼀个名为lab1的⽬录，则该lab1⽬录可以表⽰为：&#xA;/home/ustc/os/lab1&#xA;~/os/lab1&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;如果⼯作⽬录在家⽬录：os/lab1&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;如果⼯作⽬录在os⽬录：lab1&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;ls&lt;/strong&gt; [参数] [name]&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;ls / 列出所有根目录&lt;/li&gt;&#xA;&lt;li&gt;ls *.txt 列出所有txt文件&lt;/li&gt;&#xA;&lt;li&gt;参数&#xA;&lt;ul&gt;&#xA;&lt;li&gt;-a 显示所有文件及目录&lt;/li&gt;&#xA;&lt;li&gt;-d 只列出目录&lt;/li&gt;&#xA;&lt;li&gt;-l 长格式,详细解释后面有&lt;/li&gt;&#xA;&lt;li&gt;-r 逆序排序&lt;/li&gt;&#xA;&lt;li&gt;-t&lt;/li&gt;&#xA;&lt;li&gt;-A&lt;/li&gt;&#xA;&lt;li&gt;-F&lt;/li&gt;&#xA;&lt;li&gt;-R 递归处理，显示所有目录及子文件&lt;/li&gt;&#xA;&lt;li&gt;-la等价于 ll&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;ls- lh: (h让total下的数据变成k,m等易于读的大小)&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;total 4.0K&#xA;-rw-rw-r-- 1 largeoyos largeoyos 9 Mar  4 16:59 readme.txt&#xA;-rw-rw-r-- 1 largeoyos largeoyos 0 Mar  4 16:55 study.txt&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;&#xA;&lt;li&gt;文件类型:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;普通文件:文本文件：ASCII码形式存储，以-开头，如：&#xA;-rw-r&amp;ndash;r&amp;ndash;1 root root 39599 Mar 8 12:15 x.sh&lt;/li&gt;&#xA;&lt;li&gt;目录文件：以d开头，如：&#xA;drwxr-xr-x 2 root root 4096 Aug 2 2006 bin&lt;/li&gt;&#xA;&lt;li&gt;设备文件 : 块设备文件：以b开头( 硬盘（HDD）固态硬盘（SSD）U盘 SD 卡)&#xA;brw-rw&amp;mdash;-1 root disk 3, 1 Jan 30 2003 /dev/hda1&#xA;字符设备文件：以c开头 (键盘 鼠标 串口（UART）控制台（TTY）打印机。)&#xA;crw&amp;mdash;&amp;mdash;-1 root root 4, 1 Jul 31 13:49 /dev/tty1&lt;/li&gt;&#xA;&lt;li&gt;链接文件: 存放文件系统通向文件的路径，以l开头&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;文件权限&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;-rw-rw-r--&lt;/code&gt; (权限控制)&lt;/strong&gt;：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;第一个字符 &lt;code&gt;-&lt;/code&gt; 表示这是一个&lt;strong&gt;普通文件&lt;/strong&gt;（如果是 &lt;code&gt;d&lt;/code&gt; 则表示目录）。&lt;/li&gt;&#xA;&lt;li&gt;后面的字符三个一组：&lt;code&gt;rw-&lt;/code&gt; (你)、&lt;code&gt;rw-&lt;/code&gt; (你所在的组)、&lt;code&gt;r--&lt;/code&gt; (其他人)。&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;r&lt;/code&gt;=读取，&lt;code&gt;w&lt;/code&gt;=写入，&lt;code&gt;-&lt;/code&gt;=没权限。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;1&lt;/code&gt; (链接数)&lt;/strong&gt;：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;表示有多少个文件名指向这个数据块。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;largeoyos&lt;/code&gt; (所有者)&lt;/strong&gt;：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;表示这个文件属于你（你的用户名）。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;largeoyos&lt;/code&gt; (所属组)&lt;/strong&gt;：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;表示这个文件属于哪个用户组。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;&lt;strong&gt;权限 (-rw-rw-r&amp;ndash;)&lt;/strong&gt;&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;&lt;strong&gt;链接数&lt;/strong&gt;&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;&lt;strong&gt;所有者&lt;/strong&gt;&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;&lt;strong&gt;组&lt;/strong&gt;&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;&lt;strong&gt;大小&lt;/strong&gt;&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;&lt;strong&gt;修改时间&lt;/strong&gt;&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;&lt;strong&gt;文件名&lt;/strong&gt;&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;文件类型与权限&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;1&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;largeoyos&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;largeoyos&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;Mar 4 16:54&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;readme.txt&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;pwd&lt;/strong&gt; [&amp;ndash;help] [&amp;ndash;version]&#xA;&lt;ul&gt;&#xA;&lt;li&gt;pwd 查看当前所在目录&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;cd&lt;/strong&gt; 切换工作目录&#xA;&lt;ul&gt;&#xA;&lt;li&gt;cd .. 返回上一级目录&lt;/li&gt;&#xA;&lt;li&gt;cd - 返回上一次所在目录&lt;/li&gt;&#xA;&lt;li&gt;cd ../../../ 回退三级&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;mkdir&lt;/strong&gt; 创建新目录&#xA;&lt;ul&gt;&#xA;&lt;li&gt;mkdir&#xA;-p folder/test (folder目录下建立test文件夹,加了-p参数后,若folder不存在则直接新建)&#xA;-m 设置目录权限 :mkdir -m 700 3&#xA;常见的权限组合表&#xA;read:4; write:2;execute:1;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;&lt;strong&gt;数字&lt;/strong&gt;&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;&lt;strong&gt;权限位&lt;/strong&gt;&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;&lt;strong&gt;含义&lt;/strong&gt;&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;777&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;rwxrwxrwx&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;所有人都能干任何事（很不安全！）&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;755&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;rwxr-xr-x&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;我全能干，别人只能看和进（程序的默认权限）&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;644&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;rw-r--r--&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;我能读写，别人只能看（普通文件的默认权限）&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;600&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;rw-------&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;只有我能读写（&lt;strong&gt;你的 .pem 密钥文件就该设成这样&lt;/strong&gt;）&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;rmdir&lt;/strong&gt; 删除空目录 -p 当子目录被删除后使他成为空目录的话则一并删除&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;rm 删除一个文件或目录 rm [-rf] name&#xA;-i 删除前逐一询问确认。&#xA;-f 即使原档案属性设为唯读，亦直接删除，无需逐一确认。&#xA;-r 将目录及以下之档案亦逐一删除。&#xA;删除当前目录下的所有文件及目录，命令行为：&#xA;rm  -r  *&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;cp复制文件或目录  cp [-r] source dest&#xA;&lt;code&gt;-r&lt;/code&gt; 或 &lt;code&gt;-R&lt;/code&gt;：递归复制目录及其内容（用于复制目录）。 &lt;br&gt;&#xA;&lt;code&gt;-i&lt;/code&gt;：交互模式，覆盖前提示用户确认。&#xA;&lt;code&gt;-f&lt;/code&gt;：强制复制，覆盖目标文件而不提示。 &lt;br&gt;&#xA;&lt;code&gt;-v&lt;/code&gt;：显示详细的复制过程（verbose）。&#xA;&lt;code&gt;-p&lt;/code&gt;：保留文件的原始属性（如权限、时间戳等）。&#xA;&lt;code&gt;-a&lt;/code&gt;：归档模式，等同于 &lt;code&gt;-dpR&lt;/code&gt;，保留所有文件属性和递归复制目录。&#xA;&lt;code&gt;-u&lt;/code&gt;：仅当源文件比目标文件新时才复制（更新模式）。 &lt;br&gt;&#xA;&lt;code&gt;-l&lt;/code&gt;：创建硬链接而不是复制文件。&#xA;&lt;code&gt;-s&lt;/code&gt;：创建符号链接（软链接）而不是复制文件。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;mv&lt;/strong&gt; 移动或重命名文件或目录  mv source dest&#xA;-i：覆盖现存文件时提示，建议打开此选项，避免误操作覆盖掉目标文件&#xA;-f：不提示直接覆盖存在的目标文件&#xA;&lt;strong&gt;-n&lt;/strong&gt;: 不要覆盖任何已存在的文件或目录。&#xA;&lt;strong&gt;-u&lt;/strong&gt;：当源文件比目标文件新或者目标文件不存在时，才执行移动操作。&#xA;&lt;strong&gt;-b&lt;/strong&gt;: 当目标文件或目录存在时，在执行覆盖前，会为其创建一个备份。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;chmod&lt;/strong&gt; 改变文件或目录的权限&#xA;MODE模式：&#xA;u：文件所属帐户&#xA;g：文件所属组&#xA;o：不同组的帐户&#xA;a：所有帐户&#xA;+：添加权限&#xA;-：去除权限&#xA;=：使得指定文件只具有这些权限&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;  使文件file各用户都拥有完全权限： chmod 777 file&#xA;  允许所有人读file，但只有拥有者能改变它： chmod 644 file&#xA;  给所有人增加写权： chmod a+w file&#xA;  对组级和其他用户除去写权和读权： chmod o-wr,g-wr file&#xA;  建立其他用户的只读权： chmod o=r file&#xA;  注意控制权限，尽量不要给其他用户修改删除文件等权限&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;ln :为某一个文件在另外一个位置建立一个同步的链接&#xA;ln -s /目标文件夹的完整路径 /快捷方式存放的路径&#xA;-s 代表软连接&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;lsblk 查看磁盘样貌&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS&#xA;loop0    7:0    0  73.9M  1 loop /snap/core22/2045&#xA;loop1    7:1    0     4K  1 loop /snap/bare/5&#xA;loop2    7:2    0 245.1M  1 loop /snap/firefox/6565&#xA;loop3    7:3    0 251.6M  1 loop /snap/firefox/7836&#xA;loop4    7:4    0  16.4M  1 loop /snap/firmware-updater/216&#xA;loop5    7:5    0   516M  1 loop /snap/gnome-42-2204/202&#xA;loop6    7:6    0  18.5M  1 loop /snap/firmware-updater/210&#xA;loop7    7:7    0  91.7M  1 loop /snap/gtk-common-themes/1535&#xA;loop8    7:8    0  10.8M  1 loop /snap/snap-store/1270&#xA;loop9    7:9    0  49.3M  1 loop /snap/snapd/24792&#xA;loop10   7:10   0  48.1M  1 loop /snap/snapd/25935&#xA;loop11   7:11   0   576K  1 loop /snap/snapd-desktop-integration/315&#xA;loop12   7:12   0   576K  1 loop /snap/snapd-desktop-integration/343&#xA;sda      8:0    0    60G  0 disk &#xA;├─sda1   8:1    0     1M  0 part &#xA;└─sda2   8:2    0    60G  0 part /&#xA;sr0     11:0    1   5.9G  0 rom  /media/largeoyos/Ubuntu 24.04.3 LTS amd64&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;&#xA;&lt;li&gt;sda:物理磁盘&lt;/li&gt;&#xA;&lt;li&gt;sda1:用于引导系统&lt;/li&gt;&#xA;&lt;li&gt;后面的依次叫sdb&amp;hellip;&lt;/li&gt;&#xA;&lt;li&gt;RO:只读&lt;/li&gt;&#xA;&lt;li&gt;RM:可插拔&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h5 id=&#34;根目录文件详解&#34;&gt;&lt;a href=&#34;#%e6%a0%b9%e7%9b%ae%e5%bd%95%e6%96%87%e4%bb%b6%e8%af%a6%e8%a7%a3&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;根目录文件详解&#xA;&lt;/h5&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;bin                home               mnt   sbin.usr-is-merged  usr&#xA;bin.usr-is-merged  lib                opt   snap                var&#xA;boot               lib64              proc  srv&#xA;cdrom              lib.usr-is-merged  root  swap.img&#xA;dev                lost+found         run   sys&#xA;etc                media              sbin  tmp&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h6 id=&#34;1-核心居住区你最常打交道的&#34;&gt;&lt;a href=&#34;#1-%e6%a0%b8%e5%bf%83%e5%b1%85%e4%bd%8f%e5%8c%ba%e4%bd%a0%e6%9c%80%e5%b8%b8%e6%89%93%e4%ba%a4%e9%81%93%e7%9a%84&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;1. 核心居住区（你最常打交道的）&#xA;&lt;/h6&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;/home&lt;/code&gt;&lt;/strong&gt;：&lt;strong&gt;这是你的私人领地。&lt;/strong&gt; 你的桌面、下载、文档全都存在这里。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;/root&lt;/code&gt;&lt;/strong&gt;：&lt;strong&gt;超级管理员的家。&lt;/strong&gt; 它是系统老大（root 用户）的私人房间。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;/tmp&lt;/code&gt;&lt;/strong&gt;：&lt;strong&gt;临时存放处。&lt;/strong&gt; 软件运行时产生的临时垃圾会扔在这里，通常系统重启后这里会被清空。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h6 id=&#34;2-系统核心区相当于大楼的配电室和承重墙&#34;&gt;&lt;a href=&#34;#2-%e7%b3%bb%e7%bb%9f%e6%a0%b8%e5%bf%83%e5%8c%ba%e7%9b%b8%e5%bd%93%e4%ba%8e%e5%a4%a7%e6%a5%bc%e7%9a%84%e9%85%8d%e7%94%b5%e5%ae%a4%e5%92%8c%e6%89%bf%e9%87%8d%e5%a2%99&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;2. 系统核心区（相当于大楼的配电室和承重墙）&#xA;&lt;/h6&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;/bin&lt;/code&gt; &amp;amp; &lt;code&gt;/sbin&lt;/code&gt;&lt;/strong&gt;：&lt;strong&gt;命令存放地。&lt;/strong&gt; &lt;code&gt;ls&lt;/code&gt;, &lt;code&gt;cd&lt;/code&gt;, &lt;code&gt;cp&lt;/code&gt; 等基本命令就住在这里。带有 &lt;code&gt;s&lt;/code&gt; 的（sbin）通常是给管理员用的高级命令。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;/etc&lt;/code&gt;&lt;/strong&gt;：&lt;strong&gt;配置中心。&lt;/strong&gt; 所有的系统设置文件（比如网络配置、软件选项）都放在这。&lt;strong&gt;想改系统设置，通常就是改这里的某个文件。&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;/boot&lt;/code&gt;&lt;/strong&gt;：&lt;strong&gt;启动区。&lt;/strong&gt; 存放 Linux 内核和启动引导程序（GRUB）。没事别动它，动了系统可能就起不来了。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;/usr&lt;/code&gt;&lt;/strong&gt;：&lt;strong&gt;软件安装区。&lt;/strong&gt; 你以后安装的大部分用户级软件（像浏览器、播放器）的代码和数据都在这。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h6 id=&#34;3-设备与硬件区linux-的黑科技&#34;&gt;&lt;a href=&#34;#3-%e8%ae%be%e5%a4%87%e4%b8%8e%e7%a1%ac%e4%bb%b6%e5%8c%balinux-%e7%9a%84%e9%bb%91%e7%a7%91%e6%8a%80&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;3. 设备与硬件区（Linux 的“黑科技”）&#xA;&lt;/h6&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;/dev&lt;/code&gt;&lt;/strong&gt;：&lt;strong&gt;设备文件夹。&lt;/strong&gt; 在 Linux 看来，“一切皆文件”。你的硬盘、鼠标、键盘在这里都被映射成一个文件。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;/media&lt;/code&gt; &amp;amp; &lt;code&gt;/mnt&lt;/code&gt;&lt;/strong&gt;：&lt;strong&gt;外部设备挂载点。&lt;/strong&gt; 你插个 U 盘或者挂载第二个硬盘，它们的内容就会显示在这里。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;/proc&lt;/code&gt; &amp;amp; &lt;code&gt;/sys&lt;/code&gt;&lt;/strong&gt;：&lt;strong&gt;虚拟文件夹。&lt;/strong&gt; 它们不占用硬盘空间，而是内存里运行状态的实时反馈。比如你想看 CPU 信息，其实就是在读这里的文件。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h6 id=&#34;4-特殊文件&#34;&gt;&lt;a href=&#34;#4-%e7%89%b9%e6%ae%8a%e6%96%87%e4%bb%b6&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;4. 特殊文件&#xA;&lt;/h6&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;swap.img&lt;/code&gt;&lt;/strong&gt;：&lt;strong&gt;虚拟内存文件。&lt;/strong&gt; 当你的物理内存不够用时，系统会把一部分硬盘当内存使。那个红叉是因为这个文件正在被系统锁定使用，普通人不能随便读写。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;3文件控制&#34;&gt;&lt;a href=&#34;#3%e6%96%87%e4%bb%b6%e6%8e%a7%e5%88%b6&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;3.文件控制&#xA;&lt;/h4&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;echo&lt;/strong&gt; 将文本输出到标准输出&#xA;&lt;ul&gt;&#xA;&lt;li&gt;echo &amp;ldquo;Hello World&amp;rdquo; 显示字符串&lt;/li&gt;&#xA;&lt;li&gt;echo 内容&amp;raquo;test.txt 追加内容进test.txt&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;cat&lt;/strong&gt; 将文件内容输出到屏幕&lt;/li&gt;&#xA;&lt;li&gt;touch xxx.txt :新建txt文件&lt;/li&gt;&#xA;&lt;li&gt;vim xxx.txt :创建后同时用vim打开&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;4进程控制&#34;&gt;&lt;a href=&#34;#4%e8%bf%9b%e7%a8%8b%e6%8e%a7%e5%88%b6&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;4.进程控制&#xA;&lt;/h4&gt;&lt;ul&gt;&#xA;&lt;li&gt;kill&#xA;&lt;code&gt;-l&lt;/code&gt;：列出所有可用的信号。&#xA;&lt;code&gt;-s&lt;/code&gt;：发送特定的信号给目标进程，如 &lt;code&gt;-9&lt;/code&gt; 表示发送 KILL 信号，即强制终止进程。&#xA;常用的几个信号:&#xA;&lt;code&gt;SIGKILL&lt;/code&gt;（信号9）：立即结束进程，不能被捕获或忽略。&#xA;&lt;code&gt;SIGTERM&lt;/code&gt;（信号15）：正常结束进程，可以被捕获或忽略。&#xA;&lt;code&gt;SIGSTOP&lt;/code&gt;（信号19）：暂停进程，不能被捕获、忽略或结束。&#xA;&lt;code&gt;SIGCONT&lt;/code&gt;（信号18）：继续执行被暂停的进程。&#xA;&lt;code&gt;SIGINT&lt;/code&gt;（信号2）：通常是Ctrl+C产生的信号，可以被进程捕获或忽略。&#xA;如kill -9 686&lt;/li&gt;&#xA;&lt;li&gt;ps :任务管理器&#xA;&lt;code&gt;ps&lt;/code&gt;: 显示&lt;strong&gt;当前用户&lt;/strong&gt;在当前终端控制下的进程。考虑到用户通常想看不止当前用户和当前终端下的进程，所以不加参数的用法并不常用。&#xA;&lt;code&gt;ps aux&lt;/code&gt;: 展示所有用户所有进程的详细信息。注意，a前面带一个横线是严格意义上不正确的使用方法。&#xA;&lt;code&gt;ps -ef&lt;/code&gt;: 也是展示所有用户所有进程的详细信息。就输出结果而言和&lt;code&gt;ps aux&lt;/code&gt;无甚差别。&lt;/li&gt;&#xA;&lt;li&gt;shutdown -h now: Close the service&lt;/li&gt;&#xA;&lt;li&gt;hostname: Check the name of the host&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;5-通配符和输出过滤&#34;&gt;&lt;a href=&#34;#5-%e9%80%9a%e9%85%8d%e7%ac%a6%e5%92%8c%e8%be%93%e5%87%ba%e8%bf%87%e6%bb%a4&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;5. 通配符和输出过滤&#xA;&lt;/h4&gt;&lt;ul&gt;&#xA;&lt;li&gt;? 通配符 :代表一个字符&lt;/li&gt;&#xA;&lt;li&gt;*通配符 :代表任意个字符&lt;/li&gt;&#xA;&lt;li&gt;[n1-n2]通配符 : 指定查询范围，n1 n2代表任意数字或字母&#xA;ls [a-z]*&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;6-安装命令&#34;&gt;&lt;a href=&#34;#6-%e5%ae%89%e8%a3%85%e5%91%bd%e4%bb%a4&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;6. 安装命令&#xA;&lt;/h4&gt;&lt;h5 id=&#34;apt&#34;&gt;&lt;a href=&#34;#apt&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;apt&#xA;&lt;/h5&gt;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;sudo apt update&lt;/strong&gt; 刷新电脑上的软件清单,看看有没有新版本的软件可以用&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;sudo apt install xxx :安装xxx应用&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;sudo apt remove xxx :卸载xxx应用&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;sudo apt-get install xxx -y :不带进度条的安装,常用于脚本,以保证输出格式&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;sudo software-properties-gtk 打开&amp;quot;软件与更新&amp;quot;程序&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;sudo apt install&lt;/strong&gt; open-vm-tools-desktop 安装VMware Tools 工具&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;disk 或gparted是磁盘工具&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h5 id=&#34;wegt&#34;&gt;&lt;a href=&#34;#wegt&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;wegt&#xA;&lt;/h5&gt;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;wget是一个在命令行下下载文件的工具。常见的使用方法是：&lt;code&gt;wget [-O FILE] URL&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;例如，我们要下载 &lt;a class=&#34;link&#34; href=&#34;https://git-scm.com/images/logo@2x.png&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://git-scm.com/images/logo@2x.png&lt;/a&gt; 到本地。&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;直接下载：&lt;code&gt;wget https://git-scm.com/images/logo@2x.png&lt;/code&gt;，文件名是&lt;a class=&#34;link&#34; href=&#34;mailto:logo@2x.png&#34; &gt;logo@2x.png&lt;/a&gt;。&lt;/li&gt;&#xA;&lt;li&gt;直接下载并重命名：&lt;code&gt;wget -O git.png https://git-scm.com/images/logo@2x.png&lt;/code&gt;，文件名是git.png。注：-O中的O表示字母O而不是数字0。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;注意，如果发现有同名文件，1所示方法会在文件名后面加上.1的后缀进行区分，而2所示方法会直接覆盖。&#xA;wget -O ./personal_file/git.png &lt;a class=&#34;link&#34; href=&#34;https://git-scm.com/images/logo@2x.png&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://git-scm.com/images/logo@2x.png&lt;/a&gt; 改变目录这样写&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;7-网络命令&#34;&gt;&lt;a href=&#34;#7-%e7%bd%91%e7%bb%9c%e5%91%bd%e4%bb%a4&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;7. 网络命令&#xA;&lt;/h4&gt;&lt;ul&gt;&#xA;&lt;li&gt;ping -c 4 192.168.119.1&lt;br&gt;&#xA;-c 限制次数 4是次数&lt;/li&gt;&#xA;&lt;li&gt;ip add: Check the ip address&lt;/li&gt;&#xA;&lt;li&gt;curl ifconfig.me :查询公网ip&lt;/li&gt;&#xA;&lt;li&gt;curl -4 ifconfig.me :强制查询ipv4地址&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;1: lo: &amp;lt;LOOPBACK,UP,LOWER_UP&amp;gt; mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000&#xA;    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00&#xA;    inet 127.0.0.1/8 scope host lo&#xA;       valid_lft forever preferred_lft forever&#xA;    inet6 ::1/128 scope host noprefixroute &#xA;       valid_lft forever preferred_lft forever&#xA;2: eth0@if2919: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc noqueue state UP group default qlen 1000&#xA;    link/ether bc:24:11:70:94:ab brd ff:ff:ff:ff:ff:ff link-netnsid 0&#xA;    inet 172.31.55.232/16 brd 172.31.255.255 scope global eth0&#xA;       valid_lft forever preferred_lft forever&#xA;    inet6 2001:da8:d800:4bfc:be24:11ff:fe70:94ab/64 scope global dynamic mngtmpaddr noprefixroute &#xA;       valid_lft 86398sec preferred_lft 14398sec&#xA;    inet6 fe80::be24:11ff:fe70:94ab/64 scope link &#xA;       valid_lft forever preferred_lft forever&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h6 id=&#34;1-lo-loopback--回环网卡&#34;&gt;&lt;a href=&#34;#1-lo-loopback--%e5%9b%9e%e7%8e%af%e7%bd%91%e5%8d%a1&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;1. &lt;code&gt;lo&lt;/code&gt; (Loopback / 回环网卡)&#xA;&lt;/h6&gt;&lt;ul&gt;&#xA;&lt;li&gt;这是虚拟的“本地网卡”，专门用于机器&lt;strong&gt;自己跟自己通信&lt;/strong&gt;。&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;关键地址：&lt;/strong&gt; &lt;code&gt;127.0.0.1&lt;/code&gt; (IPv4) 和 &lt;code&gt;::1&lt;/code&gt; (IPv6)。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;用途：&lt;/strong&gt; 无论你是否插网线，这个网卡永远存在。当你运行 Nginx 并在服务器本机输入 &lt;code&gt;curl 127.0.0.1&lt;/code&gt; 时，流量走的就是这个网卡。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;状态：&lt;/strong&gt; &lt;code&gt;UNKNOWN&lt;/code&gt; 在这里是正常的。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h6 id=&#34;2-eth0-ethernet--以太网卡&#34;&gt;&lt;a href=&#34;#2-eth0-ethernet--%e4%bb%a5%e5%a4%aa%e7%bd%91%e5%8d%a1&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;2. &lt;code&gt;eth0&lt;/code&gt; (Ethernet / 以太网卡)&#xA;&lt;/h6&gt;&lt;ul&gt;&#xA;&lt;li&gt;这是你的&lt;strong&gt;主网卡&lt;/strong&gt;，负责服务器与外界（互联网或其他服务器）的通信。&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;内网 IP 地址：&lt;/strong&gt; &lt;code&gt;172.31.55.232&lt;/code&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;这是一个私有 IP。如果你的服务器在阿里云、腾讯云或校园网内，这是它在局域网里的身份。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;IPv6 地址：&lt;/strong&gt; &lt;code&gt;2001:da8:...&lt;/code&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;这是一个公网 IPv6 地址。如果你的网络环境支持 IPv6，别人可以通过这个长地址直接访问你的 Nginx。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;MAC 地址：&lt;/strong&gt; &lt;code&gt;bc:24:11:70:94:ab&lt;/code&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;这是网卡的物理硬件唯一标识。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;状态：&lt;/strong&gt; &lt;code&gt;UP&lt;/code&gt; 表示网卡正在工作且已连接。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h6 id=&#34;3-重点总结哪个地址最有用&#34;&gt;&lt;a href=&#34;#3-%e9%87%8d%e7%82%b9%e6%80%bb%e7%bb%93%e5%93%aa%e4%b8%aa%e5%9c%b0%e5%9d%80%e6%9c%80%e6%9c%89%e7%94%a8&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;3. 重点总结：哪个地址最有用？&#xA;&lt;/h6&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;如果你在服务器本机测试 Nginx&lt;/strong&gt;：请访问 &lt;code&gt;127.0.0.1&lt;/code&gt;。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;如果你在同一局域网的其他机器访问这台服务器&lt;/strong&gt;：请访问 &lt;code&gt;172.31.55.232&lt;/code&gt;。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;如果你想从外网（家里）访问这台服务器&lt;/strong&gt;：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;通常需要一个&lt;strong&gt;公网 IP&lt;/strong&gt;（在云服务的管理后台可以看到，通常不直接显示在这个列表里，因为它是通过 NAT 映射的）。&lt;/li&gt;&#xA;&lt;li&gt;或者尝试使用那个以 &lt;code&gt;2001&lt;/code&gt; 开头的 &lt;strong&gt;IPv6 地址&lt;/strong&gt;（前提是你家里的网络也支持 IPv6）。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;8-配置python环境&#34;&gt;&lt;a href=&#34;#8-%e9%85%8d%e7%bd%aepython%e7%8e%af%e5%a2%83&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;8. 配置python环境&#xA;&lt;/h4&gt;&lt;p&gt;再次进入&#xA;source myenv/bin/activate&#xA;再次退出&#xA;deactivate&#xA;快速找回&#xA;find ~ -name &amp;ldquo;activate&amp;rdquo; -type f&lt;/p&gt;&#xA;&lt;h4 id=&#34;9nginx&#34;&gt;&lt;a href=&#34;#9nginx&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;9.Nginx&#xA;&lt;/h4&gt;&lt;ul&gt;&#xA;&lt;li&gt;sudo apt install nginx 安装并且自动启动&lt;/li&gt;&#xA;&lt;li&gt;本机用localhost进入,windows用 http://192.168.119.129&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;练习服务管理：&lt;/strong&gt; 你可以学习如何开启、关闭、重启服务：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;按下键盘上的 &lt;strong&gt;&lt;code&gt;q&lt;/code&gt;&lt;/strong&gt; 键即可回到命令行输入状态。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;&lt;strong&gt;操作&lt;/strong&gt;&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;&lt;strong&gt;命令&lt;/strong&gt;&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;启动&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;sudo systemctl start nginx&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;停止&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;sudo systemctl stop nginx&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;重启&lt;/strong&gt; (应用重大更改)&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;sudo systemctl restart nginx&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;重载&lt;/strong&gt; (无缝应用配置更改)&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;sudo systemctl reload nginx&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;开机自启&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;sudo systemctl enable nginx&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;检查状态&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;sudo systemctl status nginx&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h5 id=&#34;查看端口占用&#34;&gt;&lt;a href=&#34;#%e6%9f%a5%e7%9c%8b%e7%ab%af%e5%8f%a3%e5%8d%a0%e7%94%a8&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;&lt;strong&gt;查看端口占用：&lt;/strong&gt;&#xA;&lt;/h5&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ss -tunlp | grep 80&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这会告诉你 80 端口（HTTP 默认端口）是否被 Nginx 占用了。&lt;/p&gt;&#xA;&lt;p&gt;tcp   LISTEN 0      511          0.0.0.0:80         0.0.0.0:*       &lt;br&gt;&#xA;tcp   LISTEN 0      511             [::]:80            [::]:*&lt;/p&gt;&#xA;&lt;h6 id=&#34;1-命令在查什么&#34;&gt;&lt;a href=&#34;#1-%e5%91%bd%e4%bb%a4%e5%9c%a8%e6%9f%a5%e4%bb%80%e4%b9%88&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;1. 命令在查什么？&#xA;&lt;/h6&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;ss&lt;/code&gt;&lt;/strong&gt;：查看系统的网络套接字（Sockets）统计信息。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;-tunlp&lt;/code&gt;&lt;/strong&gt;：这是一个组合参数：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;t&lt;/code&gt;&lt;/strong&gt;: 显示 TCP 连接（网页浏览通常用 TCP）。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;u&lt;/code&gt;&lt;/strong&gt;: 显示 UDP 连接。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;n&lt;/code&gt;&lt;/strong&gt;: 直接显示端口号（如 80），而不是服务名（如 http）。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;l&lt;/code&gt;&lt;/strong&gt;: 只显示正在 &lt;strong&gt;LISTEN（监听）&lt;/strong&gt; 的端口。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;p&lt;/code&gt;&lt;/strong&gt;: 显示是哪个程序在占用这个端口。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;| grep 80&lt;/code&gt;&lt;/strong&gt;：在所有结果中过滤出包含 “80” 的行。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h6 id=&#34;2-结果解读&#34;&gt;&lt;a href=&#34;#2-%e7%bb%93%e6%9e%9c%e8%a7%a3%e8%af%bb&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;2. 结果解读&#xA;&lt;/h6&gt;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;&lt;strong&gt;结果内容&lt;/strong&gt;&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;&lt;strong&gt;含义&lt;/strong&gt;&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;0.0.0.0:80&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Nginx 正在监听 &lt;strong&gt;IPv4&lt;/strong&gt; 的 80 端口。&lt;code&gt;0.0.0.0&lt;/code&gt; 表示它接受来自&lt;strong&gt;任何 IP&lt;/strong&gt;（本地和局域网）的访问。&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;[::]:80&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Nginx 正在监听 &lt;strong&gt;IPv6&lt;/strong&gt; 的 80 端口。&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;LISTEN&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;状态正常。表示端口是开放的，随时可以处理请求。&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h5 id=&#34;绕路方案把-nginx-换到-8080-端口&#34;&gt;&lt;a href=&#34;#%e7%bb%95%e8%b7%af%e6%96%b9%e6%a1%88%e6%8a%8a-nginx-%e6%8d%a2%e5%88%b0-8080-%e7%ab%af%e5%8f%a3&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;绕路方案：把 Nginx 换到 8080 端口&#xA;&lt;/h5&gt;&lt;ul&gt;&#xA;&lt;li&gt;为了验证是不是 80 端口被封了，我们换个“高位端口”试试（高位端口通常不会被封）：&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h6 id=&#34;第一步修改-nginx-配置文件&#34;&gt;&lt;a href=&#34;#%e7%ac%ac%e4%b8%80%e6%ad%a5%e4%bf%ae%e6%94%b9-nginx-%e9%85%8d%e7%bd%ae%e6%96%87%e4%bb%b6&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;第一步：修改 Nginx 配置文件&#xA;&lt;/h6&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo vim /etc/nginx/sites-available/default&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h6 id=&#34;第二步将-80-改为-8080&#34;&gt;&lt;a href=&#34;#%e7%ac%ac%e4%ba%8c%e6%ad%a5%e5%b0%86-80-%e6%94%b9%e4%b8%ba-8080&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;第二步：将 80 改为 8080&#xA;&lt;/h6&gt;&lt;p&gt;Nginx&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;listen 80 default_server;&#xA;listen [::]:80 default_server;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;改成：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;listen 8080 default_server;&#xA;listen [::]:8080 default_server;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h6 id=&#34;第三步重启-nginx&#34;&gt;&lt;a href=&#34;#%e7%ac%ac%e4%b8%89%e6%ad%a5%e9%87%8d%e5%90%af-nginx&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;第三步：重启 Nginx&#xA;&lt;/h6&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo nginx -t                # 检查有没有写错&#xA;sudo systemctl restart nginx&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h6 id=&#34;第四步浏览器访问&#34;&gt;&lt;a href=&#34;#%e7%ac%ac%e5%9b%9b%e6%ad%a5%e6%b5%8f%e8%a7%88%e5%99%a8%e8%ae%bf%e9%97%ae&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;第四步：浏览器访问&#xA;&lt;/h6&gt;&lt;p&gt;在浏览器地址栏输入： &lt;code&gt;http://202.38.75.252:8080&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h5 id=&#34;ssh连接&#34;&gt;&lt;a href=&#34;#ssh%e8%bf%9e%e6%8e%a5&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;ssh连接&#xA;&lt;/h5&gt;&lt;ul&gt;&#xA;&lt;li&gt;ssh -i .\vlab-vm12825.pem -L 8888:localhost:8080 &lt;a class=&#34;link&#34; href=&#34;mailto:ubuntu@vlab.ustc.edu.cn&#34; &gt;ubuntu@vlab.ustc.edu.cn&lt;/a&gt;&#xA;建立远程连接&#xA;网站权限:把项目移到标准位置&lt;/li&gt;&#xA;&lt;li&gt;sudo cp -r /home/ubuntu/personal_file/LinuxLab/WebProg/var/www/my_site&lt;/li&gt;&#xA;&lt;li&gt;为了自己还能修改网页,将自己加入该所有组&lt;/li&gt;&#xA;&lt;li&gt;把你的个人账号（假设是 &lt;code&gt;ubuntu&lt;/code&gt;）拉进 Nginx 的“工人群组”里&lt;/li&gt;&#xA;&lt;li&gt;sudo usermod -aG www-data ubuntu&lt;/li&gt;&#xA;&lt;li&gt;sudo chown -R ubuntu:www-data /var/www/my_site  (chown是更改所有组)&lt;/li&gt;&#xA;&lt;li&gt;将 Nginx 的 &lt;code&gt;root&lt;/code&gt; 改为 &lt;code&gt;/var/www/my_site&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;最后，我们需要确保组员（Nginx）拥有“读”和“进入”的权限，而你拥有“写”的权限。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# 目录权限：775 (你：读写执；组：读写执；他人：读执)&#xA;find /var/www/my_site -type d -exec chmod 775 {} +&#xA;&#xA;# 文件权限：664 (你：读写；组：读写；他人：读)&#xA;find /var/www/my_site -type f -exec chmod 664 {} +&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;10-改变终端左侧的提示符&#34;&gt;&lt;a href=&#34;#10-%e6%94%b9%e5%8f%98%e7%bb%88%e7%ab%af%e5%b7%a6%e4%be%a7%e7%9a%84%e6%8f%90%e7%a4%ba%e7%ac%a6&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;10 改变终端左侧的提示符&#xA;&lt;/h4&gt;&lt;p&gt;PS1=&amp;quot;\u@\h:\w$ :&lt;/p&gt;&#xA;&lt;p&gt;PS1** 是 Linux 系统中一个非常重要的&lt;strong&gt;环境变量&lt;/strong&gt;，它的全称是 &lt;strong&gt;Prompt String 1&lt;/strong&gt;。它决定了你在终端输入命令时，左侧显示的那个**提示符（Prompt）**长什么样。&lt;/p&gt;&#xA;&lt;h5 id=&#34;1-拆解这些暗号&#34;&gt;&lt;a href=&#34;#1-%e6%8b%86%e8%a7%a3%e8%bf%99%e4%ba%9b%e6%9a%97%e5%8f%b7&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;1. 拆解这些“暗号”&#xA;&lt;/h5&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;\u&lt;/code&gt;&lt;/strong&gt; (User)：代表当前&lt;strong&gt;登录的用户名&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;@&lt;/code&gt;&lt;/strong&gt;：就是一个普通的字符“@”，用来连接用户名和主机名。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;\h&lt;/code&gt;&lt;/strong&gt; (Hostname)：代表当前&lt;strong&gt;计算机的名字&lt;/strong&gt;（主机名）。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;:&lt;/code&gt;&lt;/strong&gt;：普通的冒号分隔符。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;\w&lt;/code&gt;&lt;/strong&gt; (Working directory)：代表当前&lt;strong&gt;所在的全路径目录&lt;/strong&gt;（如果是家目录，会显示成 &lt;code&gt;~&lt;/code&gt;）。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;\$&lt;/code&gt;&lt;/strong&gt;：这是一个智能符号。如果你是&lt;strong&gt;普通用户&lt;/strong&gt;，它显示为 &lt;strong&gt;&lt;code&gt;$&lt;/code&gt;&lt;/strong&gt;；如果你切换成了 &lt;strong&gt;root（超级管理员）&lt;/strong&gt;，它会自动变成 &lt;strong&gt;&lt;code&gt;#&lt;/code&gt;&lt;/strong&gt;。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;空格&lt;/strong&gt;：最后的那个空格非常重要，它能让你的命令不紧贴着路径，看起来更清爽。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;11-终端快捷键&#34;&gt;&lt;a href=&#34;#11-%e7%bb%88%e7%ab%af%e5%bf%ab%e6%8d%b7%e9%94%ae&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;11 终端快捷键&#xA;&lt;/h4&gt;&lt;p&gt;Tab 自动补全&#xA;Tab +Tab 给出所有候选项&lt;/p&gt;&#xA;&lt;p&gt;Ctrl+Insert 复制&#xA;Shift+Insert 粘贴&lt;/p&gt;&#xA;&lt;h4 id=&#34;12-tree展示文件结构&#34;&gt;&lt;a href=&#34;#12-tree%e5%b1%95%e7%a4%ba%e6%96%87%e4%bb%b6%e7%bb%93%e6%9e%84&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;12 Tree(展示文件结构)&#xA;&lt;/h4&gt;&lt;p&gt;tree :以树状图显示文件结构&#xA;tree -L 2 :限制层数&#xA;tree -d :不显示具体文件,只看文件夹结构&#xA;tree -a :显示隐藏文件&#xA;tree -ph :显示权限 大小&#xA;tree -P &amp;ldquo;*.c|*.h&amp;rdquo; :只显示.c/.h文件&#xA;tree -I &amp;ldquo;node_modules&amp;rdquo; :排除掉特定的文件夹&#xA;tree &amp;gt; project_structure.txt :重定向输出&lt;/p&gt;&#xA;&lt;h4 id=&#34;13-du-disk-usage&#34;&gt;&lt;a href=&#34;#13-du-disk-usage&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;13 &lt;strong&gt;&lt;code&gt;du&lt;/code&gt;&lt;/strong&gt; (Disk Usage)&#xA;&lt;/h4&gt;&lt;p&gt;du:把每一个子目录的大小都列出来&#xA;du -sh . :查看整个文件夹占据空间大小&#xA;du -sh * :查看每个子文件夹大小&#xA;du -sh * | sort -hr :查看并按大小排序&#xA;du -h &amp;ndash;max-depth=1 :查看所有一级子目录&lt;/p&gt;&#xA;&lt;h4 id=&#34;14-df&#34;&gt;&lt;a href=&#34;#14-df&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;14 df&#xA;&lt;/h4&gt;&lt;p&gt;df -h :想看整个&lt;strong&gt;硬盘分区&lt;/strong&gt;（比如系统盘、挂载盘）还剩多少空间&lt;/p&gt;&#xA;&lt;h4 id=&#34;15-feh&#34;&gt;&lt;a href=&#34;#15-feh&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;15 feh&#xA;&lt;/h4&gt;&lt;h5 id=&#34;1-基本打开操作&#34;&gt;&lt;a href=&#34;#1-%e5%9f%ba%e6%9c%ac%e6%89%93%e5%bc%80%e6%93%8d%e4%bd%9c&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;1. 基本打开操作&#xA;&lt;/h5&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;feh image.jpg          # 打开单张图片&#xA;feh dir/               # 打开文件夹下所有图片（通过箭头键切换）&#xA;feh -F image.jpg       # 全屏打开&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h5 id=&#34;2-常用骚操作模式&#34;&gt;&lt;a href=&#34;#2-%e5%b8%b8%e7%94%a8%e9%aa%9a%e6%93%8d%e4%bd%9c%e6%a8%a1%e5%bc%8f&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;2. 常用“骚操作”模式&#xA;&lt;/h5&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;缩略图模式 (&lt;code&gt;-t&lt;/code&gt;)&lt;/strong&gt;：&#xA;像文件管理器一样，弹出一个窗口展示目录下所有图片的预览图。&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;feh -t ./personal_file/&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;蒙太奇拼图模式 (&lt;code&gt;-m&lt;/code&gt;)&lt;/strong&gt;：&#xA;将目录下所有图片自动拼接成一张大图。&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;feh -m ./images/ -O montage.jpg  # 拼接并保存为新图&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;幻灯片模式 (&lt;code&gt;-D&lt;/code&gt;)&lt;/strong&gt;：&#xA;每隔 2 秒自动切换下一张。&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;feh -D 2 ./slideshow/&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h5 id=&#34;3-必须掌握的键盘快捷键&#34;&gt;&lt;a href=&#34;#3-%e5%bf%85%e9%a1%bb%e6%8e%8c%e6%8f%a1%e7%9a%84%e9%94%ae%e7%9b%98%e5%bf%ab%e6%8d%b7%e9%94%ae&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;3. 必须掌握的键盘快捷键&#xA;&lt;/h5&gt;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;&lt;strong&gt;按键&lt;/strong&gt;&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;&lt;strong&gt;功能&lt;/strong&gt;&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;方向键 / 空格&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;上一张 / 下一张图片&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;方向键 + Ctrl&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;缩放图片&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;Up / Down&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;放大 / 缩小&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;R&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;旋转 (90度)&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;&amp;lt; / &amp;gt;&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;翻转图片&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;W&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;窗口适应图片大小&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;Q / Esc&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;退出程序&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h5 id=&#34;4-进阶用-feh-设置壁纸&#34;&gt;&lt;a href=&#34;#4-%e8%bf%9b%e9%98%b6%e7%94%a8-feh-%e8%ae%be%e7%bd%ae%e5%a3%81%e7%ba%b8&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;4. 进阶：用 feh 设置壁纸&#xA;&lt;/h5&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;feh --bg-fill /path/to/wallpaper.jpg&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;16-tar&#34;&gt;&lt;a href=&#34;#16-tar&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;16 tar&#xA;&lt;/h4&gt;&lt;ul&gt;&#xA;&lt;li&gt;把某名为source的文件或目录压缩成名为out.tar.gz的gzip格式压缩文件：&lt;code&gt;tar zcvf out.tar.gz source&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;解压缩某名为abc.tar.gz的gzip格式压缩文件：&lt;code&gt;tar zxvf abc.tar.gz&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;17-tmux&#34;&gt;&lt;a href=&#34;#17-tmux&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;17 tmux&#xA;&lt;/h4&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;安装&lt;/strong&gt;：&lt;code&gt;sudo apt install tmux&lt;/code&gt; (Ubuntu 默认大部分已带)。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;新建窗口&lt;/strong&gt;：&lt;code&gt;tmux&lt;/code&gt;。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;离开窗口 (Detach)&lt;/strong&gt;：按 &lt;code&gt;Ctrl + B&lt;/code&gt; 后，再按 &lt;code&gt;D&lt;/code&gt;。此时你的代码在后台运行！&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;重新进入 (Attach)&lt;/strong&gt;：&lt;code&gt;tmux attach&lt;/code&gt;。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;&lt;strong&gt;功能&lt;/strong&gt;&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;&lt;strong&gt;命令&lt;/strong&gt;&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;新建会话&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;tmux&lt;/code&gt; (或 &lt;code&gt;tmux new -s myname&lt;/code&gt; 给会话起名)&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;退出并挂起&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;先按 &lt;code&gt;Ctrl + b&lt;/code&gt;，然后按 &lt;code&gt;d&lt;/code&gt; (Detach)&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;查看所有会话&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;tmux ls&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;重连会话&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;tmux a&lt;/code&gt; (或 &lt;code&gt;tmux a -t myname&lt;/code&gt;)&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;彻底关掉会话&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;在 tmux 里输入 &lt;code&gt;exit&lt;/code&gt; 或 &lt;code&gt;tmux kill-session -t myname&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h5 id=&#34;操作逻辑前缀键-prefix&#34;&gt;&lt;a href=&#34;#%e6%93%8d%e4%bd%9c%e9%80%bb%e8%be%91%e5%89%8d%e7%bc%80%e9%94%ae-prefix&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;操作逻辑：前缀键 (Prefix)&#xA;&lt;/h5&gt;&lt;p&gt;&lt;code&gt;tmux&lt;/code&gt; 的所有快捷键都需要先按一个“启动键”，默认是 &lt;strong&gt;&lt;code&gt;Ctrl + b&lt;/code&gt;&lt;/strong&gt;。&#xA;&lt;strong&gt;操作步骤：&lt;/strong&gt; 按住 &lt;code&gt;Ctrl&lt;/code&gt; 不放再按 &lt;code&gt;b&lt;/code&gt; $\rightarrow$ 全部松开 $\rightarrow$ 快速按功能键。&lt;/p&gt;&#xA;&lt;h5 id=&#34;常用功能快捷键&#34;&gt;&lt;a href=&#34;#%e5%b8%b8%e7%94%a8%e5%8a%9f%e8%83%bd%e5%bf%ab%e6%8d%b7%e9%94%ae&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;常用功能快捷键：&#xA;&lt;/h5&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;分屏（左右）&lt;/strong&gt;：&lt;code&gt;Ctrl + b&lt;/code&gt; $\rightarrow$ &lt;code&gt;%&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;分屏（上下）&lt;/strong&gt;：&lt;code&gt;Ctrl + b&lt;/code&gt; $\rightarrow$ &lt;code&gt;&amp;quot;&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;切换窗格&lt;/strong&gt;：&lt;code&gt;Ctrl + b&lt;/code&gt; $\rightarrow$ &lt;code&gt;方向键&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;关闭当前窗格&lt;/strong&gt;：&lt;code&gt;Ctrl + b&lt;/code&gt; $\rightarrow$ &lt;code&gt;x&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;输入 &lt;code&gt;tmux new -s test&lt;/code&gt; 进入新世界。&lt;/li&gt;&#xA;&lt;li&gt;输入 &lt;code&gt;top&lt;/code&gt; 看着系统资源跳动。&lt;/li&gt;&#xA;&lt;li&gt;按 &lt;code&gt;Ctrl + b&lt;/code&gt; 然后按 &lt;code&gt;d&lt;/code&gt;。你会发现回到了原来的终端。&lt;/li&gt;&#xA;&lt;li&gt;输入 &lt;code&gt;tmux ls&lt;/code&gt; 确认 &lt;code&gt;test&lt;/code&gt; 还在后台。&lt;/li&gt;&#xA;&lt;li&gt;输入 &lt;code&gt;tmux a -t test&lt;/code&gt;，你会发现 &lt;code&gt;top&lt;/code&gt; 还在原地跳动！&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h4 id=&#34;18-alias别名&#34;&gt;&lt;a href=&#34;#18-alias%e5%88%ab%e5%90%8d&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;18. alias(别名)&#xA;&lt;/h4&gt;&lt;h5 id=&#34;核心逻辑&#34;&gt;&lt;a href=&#34;#%e6%a0%b8%e5%bf%83%e9%80%bb%e8%be%91&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;核心逻辑&#xA;&lt;/h5&gt;&lt;ul&gt;&#xA;&lt;li&gt;通过修改你家目录下的 &lt;code&gt;.bashrc&lt;/code&gt;（或 &lt;code&gt;.zshrc&lt;/code&gt;）文件，给长路径起个“外号”。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h5 id=&#34;操作步骤&#34;&gt;&lt;a href=&#34;#%e6%93%8d%e4%bd%9c%e6%ad%a5%e9%aa%a4&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;操作步骤&#xA;&lt;/h5&gt;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;打开配置文件&lt;/strong&gt;（以最常用的 bash 为例）：&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;    nano ~/.bashrc&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;ol start=&#34;2&#34;&gt;&#xA;&lt;li&gt;&lt;strong&gt;在文件末尾添加一行&lt;/strong&gt;： 假设你经常要去 &lt;code&gt;/var/www/html/my_project/assets&lt;/code&gt; 这个超长目录，你可以写：&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;alias go=&amp;#39;cd /var/www/html/my_project/assets&amp;#39;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;em&gt;注：&lt;code&gt;go&lt;/code&gt; 是你自己起的命令名，你可以换成任何喜欢的词。&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;让配置立即生效&lt;/strong&gt;： 保存退出后（Nano 编辑器是 &lt;code&gt;Ctrl+O&lt;/code&gt; 回车，&lt;code&gt;Ctrl+X&lt;/code&gt; 退出），运行：&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;source ~/.bashrc&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h4 id=&#34;19-ufw&#34;&gt;&lt;a href=&#34;#19-ufw&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;19. ufw&#xA;&lt;/h4&gt;&lt;h4 id=&#34;20&#34;&gt;&lt;a href=&#34;#20&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;20.&#xA;&lt;/h4&gt;&lt;p&gt;ai答案:&#xA;错误日志里的 &lt;strong&gt;&lt;code&gt;(13: Permission denied)&lt;/code&gt;&lt;/strong&gt; 是最直观的证据：Nginx 已经找到你的文件夹了，但是&lt;strong&gt;被系统拦在了门外&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;在 Linux 中，Nginx 以 &lt;code&gt;www-data&lt;/code&gt; 用户身份运行，而你的文件夹属于 &lt;code&gt;ubuntu&lt;/code&gt; 用户。如果中间任何一层目录（如 &lt;code&gt;/home/ubuntu&lt;/code&gt;）没有开放“执行”权限，Nginx 就无法进入该目录寻找文件。&lt;/p&gt;&#xA;&lt;h6 id=&#34;终极修复方案层层打通权限&#34;&gt;&lt;a href=&#34;#%e7%bb%88%e6%9e%81%e4%bf%ae%e5%a4%8d%e6%96%b9%e6%a1%88%e5%b1%82%e5%b1%82%e6%89%93%e9%80%9a%e6%9d%83%e9%99%90&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;终极修复方案：层层打通权限&#xA;&lt;/h6&gt;&lt;p&gt;请在虚拟机终端&lt;strong&gt;依次执行&lt;/strong&gt;以下三行命令，一行都不要跳过：&lt;/p&gt;&#xA;&lt;p&gt;Bash&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# 1. 允许其他用户（包括 Nginx）“进入”你的家目录&#xA;sudo chmod 755 /home/ubuntu&#xA;&#xA;# 2. 允许其他用户进入你的 personal_file 及其子目录&#xA;sudo chmod -R 755 /home/ubuntu/personal_file&#xA;&#xA;# 3. 确保你的网页文件本身也是可读的&#xA;sudo chmod 644 /home/ubuntu/personal_file/LinuxLab/WebProg/index.html&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;&#xA;&lt;h6 id=&#34;为什么需要执行这几步&#34;&gt;&lt;a href=&#34;#%e4%b8%ba%e4%bb%80%e4%b9%88%e9%9c%80%e8%a6%81%e6%89%a7%e8%a1%8c%e8%bf%99%e5%87%a0%e6%ad%a5&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;为什么需要执行这几步？&#xA;&lt;/h6&gt;&lt;p&gt;Linux 的权限检查是“路径式”的。即使你把 &lt;code&gt;index.html&lt;/code&gt; 设成了 &lt;code&gt;777&lt;/code&gt;（全开），但如果上一级的 &lt;code&gt;/home/ubuntu&lt;/code&gt; 是私有的（通常默认是 &lt;code&gt;700&lt;/code&gt;），Nginx 就像手里拿着钥匙却进不了院子大门的访客，依然会被报 &lt;code&gt;Permission denied&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;p&gt;这个太危险了,尤其是openclaw带来安全风险&lt;/p&gt;&#xA;&lt;p&gt;还有acl可以参考&lt;/p&gt;&#xA;&lt;h1 id=&#34;同步文件&#34;&gt;&lt;a href=&#34;#%e5%90%8c%e6%ad%a5%e6%96%87%e4%bb%b6&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;同步文件&#xA;&lt;/h1&gt;&lt;p&gt;实现“工业级”自动化同步，最核心的思想是：&lt;strong&gt;将“源码仓库”与“运行目录”分离&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;你的代码在 &lt;code&gt;/home/ubuntu&lt;/code&gt; 目录下进行 Git 操作，而 Nginx 运行的是 &lt;code&gt;/var/www/my_site&lt;/code&gt; 下的副本。这样既保证了安全（Nginx 进不去你的家目录），又保证了方便（你依然可以在家目录用 Git）。&lt;/p&gt;&#xA;&lt;p&gt;以下是两种实现方式：&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;方法一rsync-手动脚本同步最简单可控&#34;&gt;&lt;a href=&#34;#%e6%96%b9%e6%b3%95%e4%b8%80rsync-%e6%89%8b%e5%8a%a8%e8%84%9a%e6%9c%ac%e5%90%8c%e6%ad%a5%e6%9c%80%e7%ae%80%e5%8d%95%e5%8f%af%e6%8e%a7&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;方法一：rsync 手动/脚本同步（最简单、可控）&#xA;&lt;/h3&gt;&lt;p&gt;如果你习惯在本地 &lt;code&gt;git pull&lt;/code&gt; 后手动触发更新，&lt;code&gt;rsync&lt;/code&gt; 是神器。它只会同步&lt;strong&gt;增量修改&lt;/strong&gt;的文件，非常快。&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;先创建目标目录并给好权限：&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Bash&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo mkdir -p /var/www/my_site&#xA;sudo chown -R www-data:www-data /var/www/my_site&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;执行同步命令：&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Bash&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo rsync -av --delete --exclude=&amp;#39;.git&amp;#39; /home/ubuntu/personal_file/LinuxLab/my_site/ /var/www/my_site/&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;code&gt;-av&lt;/code&gt;: 归档模式，保留权限和时间戳。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;code&gt;--delete&lt;/code&gt;: 如果你在 Git 里删除了文件，&lt;code&gt;/var/www&lt;/code&gt; 里对应的文件也会被删除。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;code&gt;--exclude=&#39;.git&#39;&lt;/code&gt;: 不要把 &lt;code&gt;.git&lt;/code&gt; 文件夹拷过去，Nginx 不需要它，这也能防止源码泄露。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;进阶：写成别名（Alias）：&lt;/strong&gt; 在 &lt;code&gt;~/.bashrc&lt;/code&gt; 末尾加一行：&lt;code&gt;alias deploy=&#39;sudo rsync -av --delete --exclude=&amp;quot;.git&amp;quot; /home/ubuntu/personal_file/LinuxLab/my_site/ /var/www/my_site/&#39;&lt;/code&gt;。以后只需输入 &lt;code&gt;deploy&lt;/code&gt; 即可一键同步。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;方法二git-hook-自动同步真正的自动化&#34;&gt;&lt;a href=&#34;#%e6%96%b9%e6%b3%95%e4%ba%8cgit-hook-%e8%87%aa%e5%8a%a8%e5%90%8c%e6%ad%a5%e7%9c%9f%e6%ad%a3%e7%9a%84%e8%87%aa%e5%8a%a8%e5%8c%96&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;方法二：Git Hook 自动同步（真正的自动化）&#xA;&lt;/h3&gt;&lt;p&gt;这种方式通常用于“服务器作为远程仓库”的场景。如果你是在服务器本地 &lt;code&gt;git pull&lt;/code&gt;，可以利用 &lt;code&gt;post-merge&lt;/code&gt; 钩子（在合并/拉取代码后自动触发）。&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;进入你家目录下的 Git 仓库钩子目录：&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Bash&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;cd /home/ubuntu/personal_file/LinuxLab/my_site/.git/hooks&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;创建 &lt;code&gt;post-merge&lt;/code&gt; 脚本：&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Bash&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;nano post-merge&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;写入以下内容：&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Bash&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#!/bin/bash&#xA;# 定义目标路径&#xA;TARGET=&amp;#34;/var/www/my_site&amp;#34;&#xA;SOURCE=&amp;#34;/home/ubuntu/personal_file/LinuxLab/my_site&amp;#34;&#xA;&#xA;echo &amp;#34;Detected git pull/merge, deploying to $TARGET...&amp;#34;&#xA;&#xA;# 使用 rsync 同步到 nginx 目录&#xA;sudo rsync -av --delete --exclude=&amp;#39;.git&amp;#39; &amp;#34;$SOURCE/&amp;#34; &amp;#34;$TARGET/&amp;#34;&#xA;&#xA;# 确保权限正确&#xA;sudo chown -R www-data:www-data &amp;#34;$TARGET&amp;#34;&#xA;&#xA;echo &amp;#34;Deployment complete.&amp;#34;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;赋予执行权限：&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Bash&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;chmod +x post-merge&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;配置 sudo 免密（关键点）：&lt;/strong&gt; 由于钩子是以 &lt;code&gt;ubuntu&lt;/code&gt; 用户运行的，但同步到 &lt;code&gt;/var/www&lt;/code&gt; 需要 &lt;code&gt;sudo&lt;/code&gt;。为了不卡住，你需要给 &lt;code&gt;rsync&lt;/code&gt; 加上免密： 执行 &lt;code&gt;sudo visudo&lt;/code&gt;，在文件末尾添加：&lt;/p&gt;&#xA;&lt;p&gt;Plaintext&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ubuntu ALL=(ALL) NOPASSWD: /usr/bin/rsync&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;strong&gt;实现效果：&lt;/strong&gt; 以后你只要在 &lt;code&gt;/home/ubuntu/.../my_site&lt;/code&gt; 目录下执行 &lt;code&gt;git pull&lt;/code&gt;，代码会自动“飞”到 &lt;code&gt;/var/www/my_site&lt;/code&gt;，Nginx 会立刻感知到更新，且没有任何权限报错。&lt;/p&gt;&#xA;&lt;h1 id=&#34;全局系统命令&#34;&gt;&lt;a href=&#34;#%e5%85%a8%e5%b1%80%e7%b3%bb%e7%bb%9f%e5%91%bd%e4%bb%a4&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;全局系统命令&#xA;&lt;/h1&gt;&lt;h3 id=&#34;方案一直接创建全局系统命令最推荐&#34;&gt;&lt;a href=&#34;#%e6%96%b9%e6%a1%88%e4%b8%80%e7%9b%b4%e6%8e%a5%e5%88%9b%e5%bb%ba%e5%85%a8%e5%b1%80%e7%b3%bb%e7%bb%9f%e5%91%bd%e4%bb%a4%e6%9c%80%e6%8e%a8%e8%8d%90&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;方案一：直接创建全局系统命令（最推荐）&#xA;&lt;/h3&gt;&lt;p&gt;这种方法不依赖于任何用户的配置，直接把 &lt;code&gt;deploy&lt;/code&gt; 变成像 &lt;code&gt;ls&lt;/code&gt;、&lt;code&gt;cd&lt;/code&gt; 一样的系统命令。&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;创建脚本文件：&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Bash&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo nano /usr/local/bin/deploy&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;把下面的内容完整复制进去：&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Bash&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#!/bin/bash&#xA;# 自动执行同步命令&#xA;sudo rsync -av --delete --exclude=&amp;#34;.git&amp;#34; /home/ubuntu/personal_file/LinuxLab/my_site/ /var/www/my_site/&#xA;echo &amp;#34;-----------------------------------&amp;#34;&#xA;echo &amp;#34;部署成功: /home/.../my_site -&amp;gt; /var/www/my_site&amp;#34;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;赋予可执行权限：&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Bash&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo chmod +x /usr/local/bin/deploy&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;直接运行：&lt;/strong&gt; 现在你在&lt;strong&gt;任何目录下&lt;/strong&gt;直接输入 &lt;code&gt;deploy&lt;/code&gt; 即可，不需要 &lt;code&gt;source&lt;/code&gt;，也不需要加 &lt;code&gt;sudo&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;</description>
        </item></channel>
</rss>
