<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>星屑観測所</title>
  <subtitle>动画、漫画、游戏、轻小说，以及技术与阅读的观测记录。</subtitle>
  <link href="https://hoshikuzu.tech/feed.xml" rel="self" type="application/atom+xml"/>
  <link href="https://hoshikuzu.tech/" rel="alternate" type="text/html"/>
  <id>https://hoshikuzu.tech/</id>
  <updated>2026-10-28T16:56:08Z</updated>
  <author>
    <name>星屑</name>
  </author>
  
  <entry>
    <title>把这个角落重新搭起来</title>
    <link href="https://hoshikuzu.tech/notes/site-rebuild/" rel="alternate" type="text/html"/>
    <id>https://hoshikuzu.tech/notes/site-rebuild/</id>
    <published>2026-10-28T00:00:00Z</published>
    <updated>2026-10-28T00:00:00Z</updated>
    <summary>关于这个站的设计取舍：为什么是纯静态、为什么没有评论区、为什么坚持系统字体。</summary>
    <content type="html">&lt;p&gt;把这个站点重新搭起来了。&lt;/p&gt;
&lt;p&gt;这次的目标很明确：阅读舒服，加载快，不要有太多会分散注意力的东西。&lt;/p&gt;
&lt;h2 id=&quot;为什么是纯静态&quot; tabindex=&quot;-1&quot;&gt;为什么是纯静态&lt;/h2&gt;
&lt;p&gt;内容以文章为主，更新频率不高，不需要数据库和后台渲染。用 Eleventy 在构建时生成 HTML，服务器只负责发送文件，已经足够。&lt;/p&gt;
&lt;h2 id=&quot;为什么没有评论区&quot; tabindex=&quot;-1&quot;&gt;为什么没有评论区&lt;/h2&gt;
&lt;p&gt;不是永远不做，只是现在不想维护。评论需要审核、反垃圾、账号体系，或者至少一个第三方服务。与其一开始就加一个半死不活的评论区，不如先让写作本身顺畅。&lt;/p&gt;
&lt;p&gt;如果以后真的需要，再单独加。&lt;/p&gt;
&lt;h2 id=&quot;为什么坚持系统字体&quot; tabindex=&quot;-1&quot;&gt;为什么坚持系统字体&lt;/h2&gt;
&lt;p&gt;中文 Web Font 动辄几 MB，为了一个标题字体让所有读者等下载，不划算。系统字体已经足够好，尤其是在正文阅读上。&lt;/p&gt;
&lt;aside class=&quot;callout callout--tip&quot;&gt;
  &lt;p class=&quot;callout__title&quot;&gt;小贴士&lt;/p&gt;
&lt;p&gt;如果你也想搭一个类似的站点，先想清楚三件事：写什么、怎么找、要不要互动。技术选型可以最后再定。&lt;/p&gt;
&lt;/aside&gt;
&lt;h2 id=&quot;接下来&quot; tabindex=&quot;-1&quot;&gt;接下来&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;把 ACGN 的状态列表补完。&lt;/li&gt;
&lt;li&gt;写几篇真正的技术备忘。&lt;/li&gt;
&lt;li&gt;确认 RSS 和搜索在手机上也正常。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;慢慢来。&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>清晨的十分钟</title>
    <link href="https://hoshikuzu.tech/notes/quiet-morning/" rel="alternate" type="text/html"/>
    <id>https://hoshikuzu.tech/notes/quiet-morning/</id>
    <published>2026-10-27T00:00:00Z</published>
    <updated>2026-10-27T00:00:00Z</updated>
    <summary>在一天开始之前，留十分钟什么都不做。</summary>
    <content type="html">&lt;p&gt;最近试着在起床后不看手机，先泡一杯茶，坐在窗边十分钟。&lt;/p&gt;
&lt;p&gt;什么都不做。不规划今天，不回复消息，也不想「这十分钟有什么意义」。&lt;/p&gt;
&lt;p&gt;十分钟之后，世界还是那个世界。但进入它的方式会稍微不一样一点。&lt;/p&gt;
&lt;p&gt;有时候茶凉了才想起来喝。也没关系。&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>《蓦然回首》：想看，先留个记号</title>
    <link href="https://hoshikuzu.tech/acgn/anime/look-back-wanted/" rel="alternate" type="text/html"/>
    <id>https://hoshikuzu.tech/acgn/anime/look-back-wanted/</id>
    <published>2026-10-26T00:00:00Z</published>
    <updated>2026-10-26T00:00:00Z</updated>
    <summary>一直没找到合适的时间看。先把条目记下来，等一个安静的晚上。</summary>
    <content type="html">&lt;p&gt;一直没看，但也不想随便找个碎片时间把它看完。&lt;/p&gt;
&lt;p&gt;看预告和评论，感觉它讲的是创作、距离和某种迟到的话。这类作品需要一点完整的注意力。&lt;/p&gt;
&lt;p&gt;等一个不赶时间的晚上。&lt;/p&gt;
&lt;aside class=&quot;callout callout--note&quot;&gt;
  &lt;p class=&quot;callout__title&quot;&gt;提示&lt;/p&gt;
&lt;p&gt;如果你也在补这部，欢迎之后来交换观后感。现在这里还没有评论区，可以先用 RSS 订阅。&lt;/p&gt;
&lt;/aside&gt;
</content>
  </entry>
  
  <entry>
    <title>《义妹生活》：先记一笔想读</title>
    <link href="https://hoshikuzu.tech/acgn/novel/imouto-wanted/" rel="alternate" type="text/html"/>
    <id>https://hoshikuzu.tech/acgn/novel/imouto-wanted/</id>
    <published>2026-10-25T00:00:00Z</published>
    <updated>2026-10-25T00:00:00Z</updated>
    <summary>还没开始读，先占一个位置。想看看它怎么把「家人」写成一种缓慢靠近的关系。</summary>
    <content type="html">&lt;p&gt;还没开始读。&lt;/p&gt;
&lt;p&gt;吸引我的不是设定，而是它似乎愿意把大量篇幅放在很日常的细节上：吃饭、回家、谁先开口说话。&lt;/p&gt;
&lt;p&gt;如果读起来不别扭，可能会写一篇关于「距离感」的笔记。&lt;/p&gt;
&lt;aside class=&quot;callout callout--note&quot;&gt;
  &lt;p class=&quot;callout__title&quot;&gt;待办&lt;/p&gt;
&lt;ul class=&quot;contains-task-list&quot;&gt;
&lt;li class=&quot;task-list-item&quot;&gt;&lt;input class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; type=&quot;checkbox&quot; id=&quot;task-item-3410864&quot; /&gt;&lt;label class=&quot;task-list-item-label&quot; for=&quot;task-item-3410864&quot;&gt; 读完第一卷&lt;/label&gt;&lt;/li&gt;
&lt;li class=&quot;task-list-item&quot;&gt;&lt;input class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; type=&quot;checkbox&quot; id=&quot;task-item-1464403&quot; /&gt;&lt;label class=&quot;task-list-item-label&quot; for=&quot;task-item-1464403&quot;&gt; 记一下叙述视角的切换&lt;/label&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/aside&gt;
</content>
  </entry>
  
  <entry>
    <title>2026 秋：想读的轻小说清单</title>
    <link href="https://hoshikuzu.tech/acgn/novel/wanted-2026/" rel="alternate" type="text/html"/>
    <id>https://hoshikuzu.tech/acgn/novel/wanted-2026/</id>
    <published>2026-10-24T00:00:00Z</published>
    <updated>2026-10-24T00:00:00Z</updated>
    <summary>先记下来，免得忘记。读完了再回来打勾。</summary>
    <content type="html">&lt;p&gt;最近想读的东西有点多，先列一个清单。不是推荐，只是备忘。&lt;/p&gt;
&lt;h2 id=&quot;想读&quot; tabindex=&quot;-1&quot;&gt;想读&lt;/h2&gt;
&lt;ul class=&quot;contains-task-list&quot;&gt;
&lt;li class=&quot;task-list-item&quot;&gt;&lt;input class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; type=&quot;checkbox&quot; id=&quot;task-item-5166203&quot; /&gt;&lt;label class=&quot;task-list-item-label&quot; for=&quot;task-item-5166203&quot;&gt; 《义妹生活》——想看看它怎么处理日常和距离感。&lt;/label&gt;&lt;/li&gt;
&lt;li class=&quot;task-list-item&quot;&gt;&lt;input class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; type=&quot;checkbox&quot; id=&quot;task-item-827728&quot; /&gt;&lt;label class=&quot;task-list-item-label&quot; for=&quot;task-item-827728&quot;&gt; 《关于邻家的天使大人不知不觉把我惯成废人这档子事》——书名很长，想看看实际节奏。&lt;/label&gt;&lt;/li&gt;
&lt;li class=&quot;task-list-item&quot;&gt;&lt;input class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; type=&quot;checkbox&quot; id=&quot;task-item-7117064&quot; /&gt;&lt;label class=&quot;task-list-item-label&quot; for=&quot;task-item-7117064&quot;&gt; 《无职转生》——一直没开始，想补一下。&lt;/label&gt;&lt;/li&gt;
&lt;li class=&quot;task-list-item&quot;&gt;&lt;input class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; type=&quot;checkbox&quot; id=&quot;task-item-3427038&quot; /&gt;&lt;label class=&quot;task-list-item-label&quot; for=&quot;task-item-3427038&quot;&gt; 《86—不存在的战区—》——想看战争与日常如何并置。&lt;/label&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;在读&quot; tabindex=&quot;-1&quot;&gt;在读&lt;/h2&gt;
&lt;ul class=&quot;contains-task-list&quot;&gt;
&lt;li class=&quot;task-list-item&quot;&gt;&lt;input class=&quot;task-list-item-checkbox&quot; checked=&quot;&quot; disabled=&quot;&quot; type=&quot;checkbox&quot; id=&quot;task-item-7245964&quot; /&gt;&lt;label class=&quot;task-list-item-label&quot; for=&quot;task-item-7245964&quot;&gt; 《冰菓》——已读完，之后单独写。&lt;/label&gt;&lt;/li&gt;
&lt;li class=&quot;task-list-item&quot;&gt;&lt;input class=&quot;task-list-item-checkbox&quot; disabled=&quot;&quot; type=&quot;checkbox&quot; id=&quot;task-item-64372&quot; /&gt;&lt;label class=&quot;task-list-item-label&quot; for=&quot;task-item-64372&quot;&gt; 《狼与香辛料》——慢慢读，适合睡前。&lt;/label&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;读完的标准&quot; tabindex=&quot;-1&quot;&gt;读完的标准&lt;/h2&gt;
&lt;p&gt;对我来说，读完不一定是最后一页。有时候是「已经知道这些人接下来会怎么生活」，就可以先放下了。&lt;/p&gt;
&lt;aside class=&quot;callout callout--note&quot;&gt;
  &lt;p class=&quot;callout__title&quot;&gt;提示&lt;/p&gt;
&lt;p&gt;这个清单会持续更新。读完后会把短评放到各自的条目里。&lt;/p&gt;
&lt;/aside&gt;
</content>
  </entry>
  
  <entry>
    <title>《葬送的芙莉莲》观后感：时间、记忆与告别</title>
    <link href="https://hoshikuzu.tech/acgn/anime/frieren-review/" rel="alternate" type="text/html"/>
    <id>https://hoshikuzu.tech/acgn/anime/frieren-review/</id>
    <published>2026-10-20T00:00:00Z</published>
    <updated>2026-10-22T00:00:00Z</updated>
    <summary>一部把「时间」当作叙事材料的动画。它不急着讲冒险，而是让告别在很长的尺度上慢慢发生。</summary>
    <content type="html">&lt;p&gt;芙莉莲最打动我的地方，不是它把冒险讲得多热闹，而是它愿意把镜头停在「之后」。&lt;/p&gt;
&lt;p&gt;勇者一行打败魔王，故事本来可以在这里结束。但这部作品把大部分篇幅留给了之后：留下来的精灵，如何重新理解那些已经离开的人。&lt;/p&gt;
&lt;h2 id=&quot;时间不是背景是材料&quot; tabindex=&quot;-1&quot;&gt;时间不是背景，是材料&lt;/h2&gt;
&lt;p&gt;很多奇幻作品把长寿当作设定的一部分，用来解释角色为什么强大。芙莉莲把长寿变成了叙事本身。&lt;/p&gt;
&lt;p&gt;十年、五十年、一百年，对精灵来说只是旅程中的一小段。对人类来说，却足以让一个人从少年变成老人，让一段关系从开始走到结束。&lt;/p&gt;
&lt;h3 id=&quot;长寿者的迟钝&quot; tabindex=&quot;-1&quot;&gt;长寿者的迟钝&lt;/h3&gt;
&lt;p&gt;芙莉莲并非冷漠。她只是习惯了一个以世纪为单位的时间表，于是人类的情绪显得太急、太短、太难以捕捉。&lt;/p&gt;
&lt;p&gt;动画很聪明的地方，是让这种迟钝不被解释成缺陷，而是一种需要被慢慢学会的能力：学会在还来得及的时候，认真看身边的人。&lt;/p&gt;
&lt;aside class=&quot;callout callout--note&quot;&gt;
  &lt;p class=&quot;callout__title&quot;&gt;关于节奏&lt;/p&gt;
&lt;p&gt;前几集可能会觉得慢。它的慢不是拖沓，而是在建立一种时间感。等到后面某一次告别发生时，前面的留白才一起生效。&lt;/p&gt;
&lt;/aside&gt;
&lt;h2 id=&quot;记忆不是档案&quot; tabindex=&quot;-1&quot;&gt;记忆不是档案&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;记忆不是把过去存起来，而是在后来的人生里，反复决定什么值得留下。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这部作品里的「记得」很少是完整的复现。更多时候，是一个动作、一种味道、一句没说完的话，在很久以后突然回来。&lt;/p&gt;
&lt;p&gt;也正因为如此，角色们对同一个人的记忆并不一致。有人记得他的勇敢，有人记得他的笨拙，有人只记得他吃饭时很快。这些碎片拼在一起，才像一个真正活过的人。&lt;/p&gt;
&lt;details class=&quot;spoiler&quot;&gt;
  &lt;summary&gt;关于某个角色的剧透，点击展开&lt;/summary&gt;
  &lt;div class=&quot;spoiler__body&quot;&gt;
&lt;p&gt;辛美尔死后，芙莉莲才开始收集关于他的细节。这个设定很残忍，也很真实：我们往往在失去之后，才有耐心去理解一个人。&lt;/p&gt;
  &lt;/div&gt;
&lt;/details&gt;
&lt;h2 id=&quot;告别&quot; tabindex=&quot;-1&quot;&gt;告别&lt;/h2&gt;
&lt;p&gt;我最喜欢的，是它没有把告别拍成一次性的仪式。&lt;/p&gt;
&lt;p&gt;告别是反复发生的。一次旅行结束，一个同伴下车，一段关系改变形状。人不会因为经历过一次告别，就学会下一次不难过。&lt;/p&gt;
&lt;p&gt;芙莉莲给出的答案很轻：那就多记得一点，多看一眼，多问一句。不是为了让告别不痛，而是为了让之后的日子有东西可以回想。&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://hoshikuzu.tech/acgn/anime/frieren-review/#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h2 id=&quot;写在最后&quot; tabindex=&quot;-1&quot;&gt;写在最后&lt;/h2&gt;
&lt;p&gt;如果把它当成一部「异世界冒险」来看，它可能不够爽。但如果把它当成一部关于时间和关系的作品，它几乎每一集都在做很准确的事。&lt;/p&gt;
&lt;p&gt;评分给 9/10。少掉的一分，可能是因为我仍然希望某些段落能再克制一点。&lt;/p&gt;
&lt;hr class=&quot;footnotes-sep&quot; /&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;这句话听起来很像鸡汤。但在这部作品的语境里，它是一系列具体行动的结果，而不是一句漂亮话。 &lt;a href=&quot;https://hoshikuzu.tech/acgn/anime/frieren-review/#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;
</content>
  </entry>
  
  <entry>
    <title>C++ STL 速查：vector / map / unordered_map</title>
    <link href="https://hoshikuzu.tech/tech/language/cpp-stl-cheatsheet/" rel="alternate" type="text/html"/>
    <id>https://hoshikuzu.tech/tech/language/cpp-stl-cheatsheet/</id>
    <published>2026-10-18T00:00:00Z</published>
    <updated>2026-10-18T00:00:00Z</updated>
    <summary>把最常用的容器操作、复杂度和几个容易记混的 API 放在一页里，方便写题和写小工具时查。</summary>
    <content type="html">&lt;p&gt;这篇是给自己用的速查，不追求覆盖所有 API。示例默认使用 C++20。&lt;/p&gt;
&lt;h2 id=&quot;vector&quot; tabindex=&quot;-1&quot;&gt;vector&lt;/h2&gt;
&lt;div class=&quot;code-block&quot; data-language=&quot;cpp&quot;&gt;
  &lt;div class=&quot;code-block__bar&quot; data-pagefind-ignore=&quot;&quot;&gt;
    &lt;span class=&quot;code-block__lang&quot;&gt;vector.cpp&lt;/span&gt;
    &lt;button class=&quot;code-block__copy&quot; type=&quot;button&quot; data-copy=&quot;&quot; aria-label=&quot;复制代码&quot;&gt;复制&lt;/button&gt;
  &lt;/div&gt;
  &lt;pre class=&quot;shiki shiki-themes catppuccin-latte catppuccin-mocha&quot; style=&quot;--shiki-light:#4c4f69;--shiki-dark:#cdd6f4;--shiki-light-bg:#eff1f5;--shiki-dark-bg:#1e1e2e&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#DF8E1D;--shiki-dark:#F9E2AF&quot;&gt;#include&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt; &amp;#x3C;vector&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#DF8E1D;--shiki-dark:#F9E2AF&quot;&gt;#include&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt; &amp;#x3C;algorithm&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#DF8E1D;--shiki-dark:#F9E2AF&quot;&gt;std&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;--shiki-light:#179299;--shiki-dark:#94E2D5&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#8839EF;--shiki-dark:#CBA6F7&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;--shiki-light:#179299;--shiki-dark:#94E2D5&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt; v &lt;/span&gt;&lt;span style=&quot;--shiki-light:#179299;--shiki-dark:#94E2D5&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;--shiki-light:#FE640B;--shiki-dark:#FAB387&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--shiki-light:#FE640B;--shiki-dark:#FAB387&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--shiki-light:#FE640B;--shiki-dark:#FAB387&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;push_back&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#FE640B;--shiki-dark:#FAB387&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-light-font-style:italic;--shiki-dark:#9399B2;--shiki-dark-font-style:italic&quot;&gt;          // 末尾插入&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;emplace_back&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#FE640B;--shiki-dark:#FAB387&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-light-font-style:italic;--shiki-dark:#9399B2;--shiki-dark-font-style:italic&quot;&gt;       // 原地构造，通常比 push_back 少一次移动&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;pop_back&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;();&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-light-font-style:italic;--shiki-dark:#9399B2;--shiki-dark-font-style:italic&quot;&gt;            // 删除末尾&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;reserve&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#FE640B;--shiki-dark:#FAB387&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-light-font-style:italic;--shiki-dark:#9399B2;--shiki-dark-font-style:italic&quot;&gt;          // 预分配容量，避免多次扩容&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;resize&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#FE640B;--shiki-dark:#FAB387&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-light-font-style:italic;--shiki-dark:#9399B2;--shiki-dark-font-style:italic&quot;&gt;            // 改变元素个数（会构造/析构）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;std&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;sort&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;begin&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;(),&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt; v&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;());&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#8839EF;--shiki-dark:#CBA6F7&quot;&gt;auto&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt; it &lt;/span&gt;&lt;span style=&quot;--shiki-light:#179299;--shiki-dark:#94E2D5&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#DF8E1D;--shiki-dark:#F9E2AF&quot;&gt; std&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;lower_bound&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;begin&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;(),&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt; v&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;(),&lt;/span&gt;&lt;span style=&quot;--shiki-light:#FE640B;--shiki-dark:#FAB387&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;erase&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;begin&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;());&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-light-font-style:italic;--shiki-dark:#9399B2;--shiki-dark-font-style:italic&quot;&gt;              // 删除第一个元素，O(n)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;erase&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;begin&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;--shiki-light:#179299;--shiki-dark:#94E2D5&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;--shiki-light:#FE640B;--shiki-dark:#FAB387&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt; v&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;begin&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;--shiki-light:#179299;--shiki-dark:#94E2D5&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;--shiki-light:#FE640B;--shiki-dark:#FAB387&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-light-font-style:italic;--shiki-dark:#9399B2;--shiki-dark-font-style:italic&quot;&gt; // 删除区间 [1, 3)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;table-wrap&quot;&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;操作&lt;/th&gt;
&lt;th&gt;复杂度&lt;/th&gt;
&lt;th&gt;备注&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;push_back&lt;/code&gt; / &lt;code&gt;emplace_back&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;均摊 O(1)&lt;/td&gt;
&lt;td&gt;扩容时可能 O(n)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pop_back&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;O(1)&lt;/td&gt;
&lt;td&gt;不释放容量&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;随机访问 &lt;code&gt;v[i]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;O(1)&lt;/td&gt;
&lt;td&gt;不检查越界&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;insert&lt;/code&gt; / &lt;code&gt;erase&lt;/code&gt; 中间&lt;/td&gt;
&lt;td&gt;O(n)&lt;/td&gt;
&lt;td&gt;会移动后续元素&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;reserve(n)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;O(n)&lt;/td&gt;
&lt;td&gt;只改容量，不改 size&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;aside class=&quot;callout callout--tip&quot;&gt;
  &lt;p class=&quot;callout__title&quot;&gt;一个常见坑&lt;/p&gt;
&lt;p&gt;&lt;code&gt;v.reserve(n)&lt;/code&gt; 之后 &lt;code&gt;v.size()&lt;/code&gt; 仍然是 0。要直接访问下标，需要 &lt;code&gt;v.resize(n)&lt;/code&gt; 或先 &lt;code&gt;push_back&lt;/code&gt;。&lt;/p&gt;
&lt;/aside&gt;
&lt;h2 id=&quot;map&quot; tabindex=&quot;-1&quot;&gt;map&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;std::map&lt;/code&gt; 是红黑树，按 key 有序，操作 O(log n)。&lt;/p&gt;
&lt;div class=&quot;code-block&quot; data-language=&quot;cpp&quot;&gt;
  &lt;div class=&quot;code-block__bar&quot; data-pagefind-ignore=&quot;&quot;&gt;
    &lt;span class=&quot;code-block__lang&quot;&gt;map.cpp&lt;/span&gt;
    &lt;button class=&quot;code-block__copy&quot; type=&quot;button&quot; data-copy=&quot;&quot; aria-label=&quot;复制代码&quot;&gt;复制&lt;/button&gt;
  &lt;/div&gt;
  &lt;pre class=&quot;shiki shiki-themes catppuccin-latte catppuccin-mocha&quot; style=&quot;--shiki-light:#4c4f69;--shiki-dark:#cdd6f4;--shiki-light-bg:#eff1f5;--shiki-dark-bg:#1e1e2e&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#DF8E1D;--shiki-dark:#F9E2AF&quot;&gt;#include&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt; &amp;#x3C;map&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#DF8E1D;--shiki-dark:#F9E2AF&quot;&gt;#include&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt; &amp;#x3C;string&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#DF8E1D;--shiki-dark:#F9E2AF&quot;&gt;std&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;--shiki-light:#179299;--shiki-dark:#94E2D5&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#DF8E1D;--shiki-dark:#F9E2AF&quot;&gt;std&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--shiki-light:#8839EF;--shiki-dark:#CBA6F7&quot;&gt; int&lt;/span&gt;&lt;span style=&quot;--shiki-light:#179299;--shiki-dark:#94E2D5&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt; counts&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;counts&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt;&quot;apple&quot;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;--shiki-light:#179299;--shiki-dark:#94E2D5&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-light-font-style:italic;--shiki-dark:#9399B2;--shiki-dark-font-style:italic&quot;&gt;              // 不存在时会插入默认值 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;counts&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;insert&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt;&quot;banana&quot;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--shiki-light:#FE640B;--shiki-dark:#FAB387&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-light-font-style:italic;--shiki-dark:#9399B2;--shiki-dark-font-style:italic&quot;&gt;   // 已存在则不会覆盖&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;counts&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;emplace&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt;&quot;cherry&quot;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--shiki-light:#FE640B;--shiki-dark:#FAB387&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#8839EF;--shiki-dark:#CBA6F7&quot;&gt;auto&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt; it &lt;/span&gt;&lt;span style=&quot;--shiki-light:#179299;--shiki-dark:#94E2D5&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt; counts&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;find&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt;&quot;apple&quot;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#8839EF;--shiki-dark:#CBA6F7&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;it &lt;/span&gt;&lt;span style=&quot;--shiki-light:#179299;--shiki-dark:#94E2D5&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt; counts&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;())&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;    it&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;-&gt;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;second &lt;/span&gt;&lt;span style=&quot;--shiki-light:#179299;--shiki-dark:#94E2D5&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#FE640B;--shiki-dark:#FAB387&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#8839EF;--shiki-dark:#CBA6F7&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;--shiki-light:#8839EF;--shiki-dark:#CBA6F7&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--shiki-light:#8839EF;--shiki-dark:#CBA6F7&quot;&gt; auto&lt;/span&gt;&lt;span style=&quot;--shiki-light:#179299;--shiki-dark:#94E2D5&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt; value&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt; counts&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-light-font-style:italic;--shiki-dark:#9399B2;--shiki-dark-font-style:italic&quot;&gt;    // 按 key 升序&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;operator[]&lt;/code&gt; 会插入元素，查存在性时优先用 &lt;code&gt;find&lt;/code&gt; 或 &lt;code&gt;contains&lt;/code&gt;（C++20）。&lt;/p&gt;
&lt;h2 id=&quot;unordered_map&quot; tabindex=&quot;-1&quot;&gt;unordered_map&lt;/h2&gt;
&lt;p&gt;哈希表，平均 O(1)，不保证顺序。容易被卡哈希的题目里，可以换自定义哈希或改用 &lt;code&gt;map&lt;/code&gt;。&lt;/p&gt;
&lt;div class=&quot;code-block&quot; data-language=&quot;cpp&quot;&gt;
  &lt;div class=&quot;code-block__bar&quot; data-pagefind-ignore=&quot;&quot;&gt;
    &lt;span class=&quot;code-block__lang&quot;&gt;unordered_map.cpp&lt;/span&gt;
    &lt;button class=&quot;code-block__copy&quot; type=&quot;button&quot; data-copy=&quot;&quot; aria-label=&quot;复制代码&quot;&gt;复制&lt;/button&gt;
  &lt;/div&gt;
  &lt;pre class=&quot;shiki shiki-themes catppuccin-latte catppuccin-mocha&quot; style=&quot;--shiki-light:#4c4f69;--shiki-dark:#cdd6f4;--shiki-light-bg:#eff1f5;--shiki-dark-bg:#1e1e2e&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#DF8E1D;--shiki-dark:#F9E2AF&quot;&gt;#include&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt; &amp;#x3C;unordered_map&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#DF8E1D;--shiki-dark:#F9E2AF&quot;&gt;#include&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt; &amp;#x3C;string&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#DF8E1D;--shiki-dark:#F9E2AF&quot;&gt;std&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;unordered_map&lt;/span&gt;&lt;span style=&quot;--shiki-light:#179299;--shiki-dark:#94E2D5&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#DF8E1D;--shiki-dark:#F9E2AF&quot;&gt;std&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--shiki-light:#8839EF;--shiki-dark:#CBA6F7&quot;&gt; int&lt;/span&gt;&lt;span style=&quot;--shiki-light:#179299;--shiki-dark:#94E2D5&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt; index&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;index&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;reserve&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#FE640B;--shiki-dark:#FAB387&quot;&gt;10000&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-light-font-style:italic;--shiki-dark:#9399B2;--shiki-dark-font-style:italic&quot;&gt;   // 预分配桶，减少 rehash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;index&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt;&quot;key&quot;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;--shiki-light:#179299;--shiki-dark:#94E2D5&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;--shiki-light:#FE640B;--shiki-dark:#FAB387&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#8839EF;--shiki-dark:#CBA6F7&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;--shiki-light:#8839EF;--shiki-dark:#CBA6F7&quot;&gt;auto&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt; it &lt;/span&gt;&lt;span style=&quot;--shiki-light:#179299;--shiki-dark:#94E2D5&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt; index&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;find&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt;&quot;key&quot;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt; it &lt;/span&gt;&lt;span style=&quot;--shiki-light:#179299;--shiki-dark:#94E2D5&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt; index&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;())&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-light-font-style:italic;--shiki-dark:#9399B2;--shiki-dark-font-style:italic&quot;&gt;    // it-&gt;second&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;table-wrap&quot;&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;容器&lt;/th&gt;
&lt;th&gt;顺序&lt;/th&gt;
&lt;th&gt;查找&lt;/th&gt;
&lt;th&gt;插入&lt;/th&gt;
&lt;th&gt;适用&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;map&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;按 key 有序&lt;/td&gt;
&lt;td&gt;O(log n)&lt;/td&gt;
&lt;td&gt;O(log n)&lt;/td&gt;
&lt;td&gt;需要有序遍历&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;unordered_map&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;无序&lt;/td&gt;
&lt;td&gt;平均 O(1)&lt;/td&gt;
&lt;td&gt;平均 O(1)&lt;/td&gt;
&lt;td&gt;只做映射&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;vector&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;插入顺序&lt;/td&gt;
&lt;td&gt;O(n)&lt;/td&gt;
&lt;td&gt;末尾均摊 O(1)&lt;/td&gt;
&lt;td&gt;小规模或需要连续内存&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h2 id=&quot;常用算法&quot; tabindex=&quot;-1&quot;&gt;常用算法&lt;/h2&gt;
&lt;div class=&quot;code-block&quot; data-language=&quot;cpp&quot;&gt;
  &lt;div class=&quot;code-block__bar&quot; data-pagefind-ignore=&quot;&quot;&gt;
    &lt;span class=&quot;code-block__lang&quot;&gt;algorithm.cpp&lt;/span&gt;
    &lt;button class=&quot;code-block__copy&quot; type=&quot;button&quot; data-copy=&quot;&quot; aria-label=&quot;复制代码&quot;&gt;复制&lt;/button&gt;
  &lt;/div&gt;
  &lt;pre class=&quot;shiki shiki-themes catppuccin-latte catppuccin-mocha&quot; style=&quot;--shiki-light:#4c4f69;--shiki-dark:#cdd6f4;--shiki-light-bg:#eff1f5;--shiki-dark-bg:#1e1e2e&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#DF8E1D;--shiki-dark:#F9E2AF&quot;&gt;#include&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt; &amp;#x3C;algorithm&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#DF8E1D;--shiki-dark:#F9E2AF&quot;&gt;#include&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt; &amp;#x3C;numeric&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#DF8E1D;--shiki-dark:#F9E2AF&quot;&gt;#include&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt; &amp;#x3C;vector&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#DF8E1D;--shiki-dark:#F9E2AF&quot;&gt;std&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;--shiki-light:#179299;--shiki-dark:#94E2D5&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#8839EF;--shiki-dark:#CBA6F7&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;--shiki-light:#179299;--shiki-dark:#94E2D5&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt; v &lt;/span&gt;&lt;span style=&quot;--shiki-light:#179299;--shiki-dark:#94E2D5&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;--shiki-light:#FE640B;--shiki-dark:#FAB387&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--shiki-light:#FE640B;--shiki-dark:#FAB387&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--shiki-light:#FE640B;--shiki-dark:#FAB387&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--shiki-light:#FE640B;--shiki-dark:#FAB387&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--shiki-light:#FE640B;--shiki-dark:#FAB387&quot;&gt; 5&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;std&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;sort&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;begin&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;(),&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt; v&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;());&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;std&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;reverse&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;begin&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;(),&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt; v&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;());&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;std&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;sort&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;begin&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;(),&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt; v&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;(),&lt;/span&gt;&lt;span style=&quot;--shiki-light:#DF8E1D;--shiki-dark:#F9E2AF&quot;&gt; std&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;greater&lt;/span&gt;&lt;span style=&quot;--shiki-light:#179299;--shiki-dark:#94E2D5&quot;&gt;&amp;#x3C;&gt;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;{}&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#8839EF;--shiki-dark:#CBA6F7&quot;&gt;bool&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt; has_three &lt;/span&gt;&lt;span style=&quot;--shiki-light:#179299;--shiki-dark:#94E2D5&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#DF8E1D;--shiki-dark:#F9E2AF&quot;&gt; std&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;binary_search&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;begin&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;(),&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt; v&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;(),&lt;/span&gt;&lt;span style=&quot;--shiki-light:#FE640B;--shiki-dark:#FAB387&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#8839EF;--shiki-dark:#CBA6F7&quot;&gt;auto&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt; it &lt;/span&gt;&lt;span style=&quot;--shiki-light:#179299;--shiki-dark:#94E2D5&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#DF8E1D;--shiki-dark:#F9E2AF&quot;&gt; std&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;find&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;begin&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;(),&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt; v&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;(),&lt;/span&gt;&lt;span style=&quot;--shiki-light:#FE640B;--shiki-dark:#FAB387&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#8839EF;--shiki-dark:#CBA6F7&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt; sum &lt;/span&gt;&lt;span style=&quot;--shiki-light:#179299;--shiki-dark:#94E2D5&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#DF8E1D;--shiki-dark:#F9E2AF&quot;&gt; std&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;accumulate&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;begin&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;(),&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt; v&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;(),&lt;/span&gt;&lt;span style=&quot;--shiki-light:#FE640B;--shiki-dark:#FAB387&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#8839EF;--shiki-dark:#CBA6F7&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt; max_value &lt;/span&gt;&lt;span style=&quot;--shiki-light:#179299;--shiki-dark:#94E2D5&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#179299;--shiki-dark:#94E2D5&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;std&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;max_element&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;begin&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;(),&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt; v&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;());&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;std&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;erase_if&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;v&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt; [](&lt;/span&gt;&lt;span style=&quot;--shiki-light:#8839EF;--shiki-dark:#CBA6F7&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;--shiki-light:#E64553;--shiki-light-font-style:italic;--shiki-dark:#EBA0AC;--shiki-dark-font-style:italic&quot;&gt; x&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;--shiki-light:#8839EF;--shiki-dark:#CBA6F7&quot;&gt; return&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt; x &lt;/span&gt;&lt;span style=&quot;--shiki-light:#179299;--shiki-dark:#94E2D5&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;--shiki-light:#FE640B;--shiki-dark:#FAB387&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;--shiki-light:#179299;--shiki-dark:#94E2D5&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;--shiki-light:#FE640B;--shiki-dark:#FAB387&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt; });&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-light-font-style:italic;--shiki-dark:#9399B2;--shiki-dark-font-style:italic&quot;&gt; // C++20&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;写算法题时，先想清楚「需不需要有序」和「需不需要随机访问」，再选容器。大多数性能问题不是容器选错，而是选错之后没有测。&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://hoshikuzu.tech/tech/language/cpp-stl-cheatsheet/#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr class=&quot;footnotes-sep&quot; /&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;这句话有点绝对。更准确地说：先选一个语义正确的容器，再用 profiler 决定要不要换。 &lt;a href=&quot;https://hoshikuzu.tech/tech/language/cpp-stl-cheatsheet/#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;
</content>
  </entry>
  
  <entry>
    <title>最近的漫画练习：三张草稿</title>
    <link href="https://hoshikuzu.tech/acgn/manga/sketchbook-2026/" rel="alternate" type="text/html"/>
    <id>https://hoshikuzu.tech/acgn/manga/sketchbook-2026/</id>
    <published>2026-10-16T00:00:00Z</published>
    <updated>2026-10-16T00:00:00Z</updated>
    <summary>把最近画的三张草稿放在一起，记录一下手感和还没解决的问题。</summary>
    <content type="html">&lt;p&gt;最近在练人物站姿和简单的分镜。画得不算好，但比起上个月，至少能更快地把脑子里的画面落到纸上。&lt;/p&gt;
&lt;h2 id=&quot;三张草稿&quot; tabindex=&quot;-1&quot;&gt;三张草稿&lt;/h2&gt;
&lt;div class=&quot;gallery&quot;&gt;
&lt;figure&gt;&lt;img src=&quot;https://hoshikuzu.tech/acgn/manga/sketchbook-2026/sketch-01.svg&quot; alt=&quot;草稿一：靠窗站着的角色&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;figcaption&gt;草稿一：靠窗站着的角色&lt;/figcaption&gt;&lt;/figure&gt;
&lt;figure&gt;&lt;img src=&quot;https://hoshikuzu.tech/acgn/manga/sketchbook-2026/sketch-02.svg&quot; alt=&quot;草稿二：两个人的对话分镜&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;figcaption&gt;草稿二：两个人的对话分镜&lt;/figcaption&gt;&lt;/figure&gt;
&lt;figure&gt;&lt;img src=&quot;https://hoshikuzu.tech/acgn/manga/sketchbook-2026/sketch-03.svg&quot; alt=&quot;草稿三：雨天场景的构图练习&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;figcaption&gt;草稿三：雨天场景的构图练习&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;h2 id=&quot;在练什么&quot; tabindex=&quot;-1&quot;&gt;在练什么&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;站姿&lt;/strong&gt;：以前总是画成直直的一根，现在会先画重心线，再决定肩膀和骨盆的倾斜。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;手&lt;/strong&gt;：还是不太会画。先把手指概括成几个块面，暂时不追求细节。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;分镜&lt;/strong&gt;：开始注意「谁在看谁」，而不是只把人物摆进格子里。&lt;/li&gt;
&lt;/ul&gt;
&lt;aside class=&quot;callout callout--note&quot;&gt;
  &lt;p class=&quot;callout__title&quot;&gt;下一步&lt;/p&gt;
&lt;p&gt;想把这三张重新勾一遍线，再试试加一点网点。可能会在下一篇里放对比图。&lt;/p&gt;
&lt;/aside&gt;
</content>
  </entry>
  
  <entry>
    <title>卡牌游戏的经济循环：一个设计草案（1）</title>
    <link href="https://hoshikuzu.tech/acgn/game/card-game-design-01/" rel="alternate" type="text/html"/>
    <id>https://hoshikuzu.tech/acgn/game/card-game-design-01/</id>
    <published>2026-10-14T00:00:00Z</published>
    <updated>2026-10-14T00:00:00Z</updated>
    <summary>想做一个「每张牌都能被拆开看」的小型卡牌游戏，先把资源循环和回合节奏写清楚。</summary>
    <content type="html">&lt;p&gt;这是一个还在纸面上的设计草案。目标不是做一款完整的商业游戏，而是先验证一个核心循环：玩家每个回合做的选择，是否真的会改变下一回合的处境。&lt;/p&gt;
&lt;h2 id=&quot;目标&quot; tabindex=&quot;-1&quot;&gt;目标&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;单局 15–25 分钟。&lt;/li&gt;
&lt;li&gt;规则可以在 10 分钟内讲完。&lt;/li&gt;
&lt;li&gt;每张卡都能在三个维度上被理解：费用、节奏、资源转换。&lt;/li&gt;
&lt;li&gt;不依赖随机掉落来制造「惊喜」。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;三种资源&quot; tabindex=&quot;-1&quot;&gt;三种资源&lt;/h2&gt;
&lt;div class=&quot;table-wrap&quot;&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;资源&lt;/th&gt;
&lt;th&gt;来源&lt;/th&gt;
&lt;th&gt;用途&lt;/th&gt;
&lt;th&gt;是否可积累&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;行动点&lt;/td&gt;
&lt;td&gt;每回合固定恢复&lt;/td&gt;
&lt;td&gt;打出卡牌&lt;/td&gt;
&lt;td&gt;否&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;素材&lt;/td&gt;
&lt;td&gt;部分卡牌产出&lt;/td&gt;
&lt;td&gt;合成、升级&lt;/td&gt;
&lt;td&gt;是&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;声望&lt;/td&gt;
&lt;td&gt;完成目标获得&lt;/td&gt;
&lt;td&gt;解锁高阶卡&lt;/td&gt;
&lt;td&gt;是&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;行动点每回合清空，素材和声望跨回合保留。这样玩家每回合都要在「现在做事」和「为以后投资」之间做取舍。&lt;/p&gt;
&lt;aside class=&quot;callout callout--warning&quot;&gt;
  &lt;p class=&quot;callout__title&quot;&gt;还没想清楚的地方&lt;/p&gt;
&lt;p&gt;素材的产出如果太稳定，游戏会变成一道算术题；如果太随机，又会变成运气游戏。下一版想试试「有限随机」：从三张已知牌里选一张。&lt;/p&gt;
&lt;/aside&gt;
&lt;h2 id=&quot;回合结构&quot; tabindex=&quot;-1&quot;&gt;回合结构&lt;/h2&gt;
&lt;div class=&quot;code-block&quot; data-language=&quot;text&quot;&gt;
  &lt;div class=&quot;code-block__bar&quot; data-pagefind-ignore=&quot;&quot;&gt;
    &lt;span class=&quot;code-block__lang&quot;&gt;text&lt;/span&gt;
    &lt;button class=&quot;code-block__copy&quot; type=&quot;button&quot; data-copy=&quot;&quot; aria-label=&quot;复制代码&quot;&gt;复制&lt;/button&gt;
  &lt;/div&gt;
  &lt;pre class=&quot;shiki shiki-themes catppuccin-latte catppuccin-mocha&quot; style=&quot;--shiki-light:#4c4f69;--shiki-dark:#cdd6f4;--shiki-light-bg:#eff1f5;--shiki-dark-bg:#1e1e2e&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;回合开始&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  ├─ 恢复行动点&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  ├─ 结算持续效果&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  ├─ 抽牌（手牌上限 5）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  ├─ 玩家行动（打出卡牌 / 使用能力）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  └─ 回合结束&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;       ├─ 弃牌到上限&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;       └─ 触发回合结束效果&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;h3 id=&quot;一个最小的选择例子&quot; tabindex=&quot;-1&quot;&gt;一个最小的选择例子&lt;/h3&gt;
&lt;p&gt;手里有三张牌：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;费用 1：获得 2 素材。&lt;/li&gt;
&lt;li&gt;费用 2：造成 3 点进度。&lt;/li&gt;
&lt;li&gt;费用 1：将一张素材转化为 1 声望。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果本回合只有 2 点行动点，那么 1 + 3 的路线是「投资」，2 是「推进」，1 + 1 则是「转向」。三种选择都能解释，但后果不同，这就是我想保留的张力。&lt;/p&gt;
&lt;h2 id=&quot;下一步&quot; tabindex=&quot;-1&quot;&gt;下一步&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;用纸牌做一次 10 局的单人测试，记录每局的资源曲线。&lt;/li&gt;
&lt;li&gt;把「有限随机」改成可视化的三选一。&lt;/li&gt;
&lt;li&gt;再写一篇关于卡牌费用曲线的笔记。&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  
  <entry>
    <title>用 uv 管 Python 环境：一份最小工作流</title>
    <link href="https://hoshikuzu.tech/tech/devlog/python-env-uv/" rel="alternate" type="text/html"/>
    <id>https://hoshikuzu.tech/tech/devlog/python-env-uv/</id>
    <published>2026-10-12T00:00:00Z</published>
    <updated>2026-10-12T00:00:00Z</updated>
    <summary>从创建项目、添加依赖到运行脚本，记录一套不折腾的 uv 日常用法。</summary>
    <content type="html">&lt;p&gt;这两年 Python 环境管理最明显的变化，是 &lt;code&gt;uv&lt;/code&gt; 把「建环境、装包、锁版本、跑脚本」收进了一个命令里。&lt;/p&gt;
&lt;p&gt;这篇只记我日常用到的部分，不展开原理。&lt;/p&gt;
&lt;h2 id=&quot;安装&quot; tabindex=&quot;-1&quot;&gt;安装&lt;/h2&gt;
&lt;div class=&quot;code-block&quot; data-language=&quot;bash&quot;&gt;
  &lt;div class=&quot;code-block__bar&quot; data-pagefind-ignore=&quot;&quot;&gt;
    &lt;span class=&quot;code-block__lang&quot;&gt;bash&lt;/span&gt;
    &lt;button class=&quot;code-block__copy&quot; type=&quot;button&quot; data-copy=&quot;&quot; aria-label=&quot;复制代码&quot;&gt;复制&lt;/button&gt;
  &lt;/div&gt;
  &lt;pre class=&quot;shiki shiki-themes catppuccin-latte catppuccin-mocha&quot; style=&quot;--shiki-light:#4c4f69;--shiki-dark:#cdd6f4;--shiki-light-bg:#eff1f5;--shiki-dark-bg:#1e1e2e&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt; -LsSf&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt; https://astral.sh/uv/install.sh&lt;/span&gt;&lt;span style=&quot;--shiki-light:#179299;--shiki-dark:#94E2D5&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt; sh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;安装后确认：&lt;/p&gt;
&lt;div class=&quot;code-block&quot; data-language=&quot;bash&quot;&gt;
  &lt;div class=&quot;code-block__bar&quot; data-pagefind-ignore=&quot;&quot;&gt;
    &lt;span class=&quot;code-block__lang&quot;&gt;bash&lt;/span&gt;
    &lt;button class=&quot;code-block__copy&quot; type=&quot;button&quot; data-copy=&quot;&quot; aria-label=&quot;复制代码&quot;&gt;复制&lt;/button&gt;
  &lt;/div&gt;
  &lt;pre class=&quot;shiki shiki-themes catppuccin-latte catppuccin-mocha&quot; style=&quot;--shiki-light:#4c4f69;--shiki-dark:#cdd6f4;--shiki-light-bg:#eff1f5;--shiki-dark-bg:#1e1e2e&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt; --version&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt; python&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt; list&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;h2 id=&quot;新建项目&quot; tabindex=&quot;-1&quot;&gt;新建项目&lt;/h2&gt;
&lt;div class=&quot;code-block&quot; data-language=&quot;bash&quot;&gt;
  &lt;div class=&quot;code-block__bar&quot; data-pagefind-ignore=&quot;&quot;&gt;
    &lt;span class=&quot;code-block__lang&quot;&gt;bash&lt;/span&gt;
    &lt;button class=&quot;code-block__copy&quot; type=&quot;button&quot; data-copy=&quot;&quot; aria-label=&quot;复制代码&quot;&gt;复制&lt;/button&gt;
  &lt;/div&gt;
  &lt;pre class=&quot;shiki shiki-themes catppuccin-latte catppuccin-mocha&quot; style=&quot;--shiki-light:#4c4f69;--shiki-dark:#cdd6f4;--shiki-light-bg:#eff1f5;--shiki-dark-bg:#1e1e2e&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt; init&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt; my-project&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#D20F39;--shiki-light-font-style:italic;--shiki-dark:#F38BA8;--shiki-dark-font-style:italic&quot;&gt;cd&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt; my-project&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;会得到 &lt;code&gt;pyproject.toml&lt;/code&gt; 和一个 &lt;code&gt;.python-version&lt;/code&gt;。如果不想用默认的 Python 版本：&lt;/p&gt;
&lt;div class=&quot;code-block&quot; data-language=&quot;bash&quot;&gt;
  &lt;div class=&quot;code-block__bar&quot; data-pagefind-ignore=&quot;&quot;&gt;
    &lt;span class=&quot;code-block__lang&quot;&gt;bash&lt;/span&gt;
    &lt;button class=&quot;code-block__copy&quot; type=&quot;button&quot; data-copy=&quot;&quot; aria-label=&quot;复制代码&quot;&gt;复制&lt;/button&gt;
  &lt;/div&gt;
  &lt;pre class=&quot;shiki shiki-themes catppuccin-latte catppuccin-mocha&quot; style=&quot;--shiki-light:#4c4f69;--shiki-dark:#cdd6f4;--shiki-light-bg:#eff1f5;--shiki-dark-bg:#1e1e2e&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt; python&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;--shiki-light:#FE640B;--shiki-dark:#FAB387&quot;&gt; 3.12&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt; python&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt; pin&lt;/span&gt;&lt;span style=&quot;--shiki-light:#FE640B;--shiki-dark:#FAB387&quot;&gt; 3.12&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;h2 id=&quot;添加依赖&quot; tabindex=&quot;-1&quot;&gt;添加依赖&lt;/h2&gt;
&lt;div class=&quot;code-block&quot; data-language=&quot;bash&quot;&gt;
  &lt;div class=&quot;code-block__bar&quot; data-pagefind-ignore=&quot;&quot;&gt;
    &lt;span class=&quot;code-block__lang&quot;&gt;bash&lt;/span&gt;
    &lt;button class=&quot;code-block__copy&quot; type=&quot;button&quot; data-copy=&quot;&quot; aria-label=&quot;复制代码&quot;&gt;复制&lt;/button&gt;
  &lt;/div&gt;
  &lt;pre class=&quot;shiki shiki-themes catppuccin-latte catppuccin-mocha&quot; style=&quot;--shiki-light:#4c4f69;--shiki-dark:#cdd6f4;--shiki-light-bg:#eff1f5;--shiki-dark-bg:#1e1e2e&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt; add&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt; requests&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt; httpx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt; add&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt; --dev&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt; pytest&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt; ruff&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;uv add&lt;/code&gt; 会同时更新 &lt;code&gt;pyproject.toml&lt;/code&gt; 和 &lt;code&gt;uv.lock&lt;/code&gt;。提交时两个都进版本库。&lt;/p&gt;
&lt;aside class=&quot;callout callout--note&quot;&gt;
  &lt;p class=&quot;callout__title&quot;&gt;和 pip 的区别&lt;/p&gt;
&lt;p&gt;&lt;code&gt;uv add&lt;/code&gt; 不是「先 pip install 再手写依赖」。它会把解析结果写进 lock 文件，之后 &lt;code&gt;uv sync&lt;/code&gt; 可以复现同一套环境。&lt;/p&gt;
&lt;/aside&gt;
&lt;h2 id=&quot;运行&quot; tabindex=&quot;-1&quot;&gt;运行&lt;/h2&gt;
&lt;div class=&quot;code-block&quot; data-language=&quot;bash&quot;&gt;
  &lt;div class=&quot;code-block__bar&quot; data-pagefind-ignore=&quot;&quot;&gt;
    &lt;span class=&quot;code-block__lang&quot;&gt;bash&lt;/span&gt;
    &lt;button class=&quot;code-block__copy&quot; type=&quot;button&quot; data-copy=&quot;&quot; aria-label=&quot;复制代码&quot;&gt;复制&lt;/button&gt;
  &lt;/div&gt;
  &lt;pre class=&quot;shiki shiki-themes catppuccin-latte catppuccin-mocha&quot; style=&quot;--shiki-light:#4c4f69;--shiki-dark:#cdd6f4;--shiki-light-bg:#eff1f5;--shiki-dark-bg:#1e1e2e&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt; python&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt; main.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt; pytest&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt; ruff&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt; check&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt; .&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;uv run&lt;/code&gt; 会自动确保环境与 lock 文件一致，不需要先手动激活虚拟环境。&lt;/p&gt;
&lt;h2 id=&quot;同步与升级&quot; tabindex=&quot;-1&quot;&gt;同步与升级&lt;/h2&gt;
&lt;div class=&quot;code-block&quot; data-language=&quot;bash&quot;&gt;
  &lt;div class=&quot;code-block__bar&quot; data-pagefind-ignore=&quot;&quot;&gt;
    &lt;span class=&quot;code-block__lang&quot;&gt;bash&lt;/span&gt;
    &lt;button class=&quot;code-block__copy&quot; type=&quot;button&quot; data-copy=&quot;&quot; aria-label=&quot;复制代码&quot;&gt;复制&lt;/button&gt;
  &lt;/div&gt;
  &lt;pre class=&quot;shiki shiki-themes catppuccin-latte catppuccin-mocha&quot; style=&quot;--shiki-light:#4c4f69;--shiki-dark:#cdd6f4;--shiki-light-bg:#eff1f5;--shiki-dark-bg:#1e1e2e&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt; sync&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-light-font-style:italic;--shiki-dark:#9399B2;--shiki-dark-font-style:italic&quot;&gt;                 # 按 lock 文件同步环境&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt; lock&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt; --upgrade&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-light-font-style:italic;--shiki-dark:#9399B2;--shiki-dark-font-style:italic&quot;&gt;       # 升级依赖并重新锁定&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt; tree&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-light-font-style:italic;--shiki-dark:#9399B2;--shiki-dark-font-style:italic&quot;&gt;                 # 查看依赖树&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;h2 id=&quot;一个够用的-pyproject&quot; tabindex=&quot;-1&quot;&gt;一个够用的 pyproject&lt;/h2&gt;
&lt;div class=&quot;code-block&quot; data-language=&quot;toml&quot;&gt;
  &lt;div class=&quot;code-block__bar&quot; data-pagefind-ignore=&quot;&quot;&gt;
    &lt;span class=&quot;code-block__lang&quot;&gt;pyproject.toml&lt;/span&gt;
    &lt;button class=&quot;code-block__copy&quot; type=&quot;button&quot; data-copy=&quot;&quot; aria-label=&quot;复制代码&quot;&gt;复制&lt;/button&gt;
  &lt;/div&gt;
  &lt;pre class=&quot;shiki shiki-themes catppuccin-latte catppuccin-mocha&quot; style=&quot;--shiki-light:#4c4f69;--shiki-dark:#cdd6f4;--shiki-light-bg:#eff1f5;--shiki-dark-bg:#1e1e2e&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;project&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;name &lt;/span&gt;&lt;span style=&quot;--shiki-light:#179299;--shiki-dark:#94E2D5&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt; &quot;my-project&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;version &lt;/span&gt;&lt;span style=&quot;--shiki-light:#179299;--shiki-dark:#94E2D5&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt; &quot;0.1.0&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;requires-python &lt;/span&gt;&lt;span style=&quot;--shiki-light:#179299;--shiki-dark:#94E2D5&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt; &quot;&gt;=3.12&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;dependencies &lt;/span&gt;&lt;span style=&quot;--shiki-light:#179299;--shiki-dark:#94E2D5&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt;    &quot;httpx&gt;=0.27&quot;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt;    &quot;requests&gt;=2.32&quot;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;dependency-groups&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#4C4F69;--shiki-dark:#CDD6F4&quot;&gt;dev &lt;/span&gt;&lt;span style=&quot;--shiki-light:#179299;--shiki-dark:#94E2D5&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt;    &quot;pytest&gt;=8.0&quot;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#40A02B;--shiki-dark:#A6E3A1&quot;&gt;    &quot;ruff&gt;=0.6&quot;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#7C7F93;--shiki-dark:#9399B2&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;h2 id=&quot;小结&quot; tabindex=&quot;-1&quot;&gt;小结&lt;/h2&gt;
&lt;p&gt;如果只是写脚本，&lt;code&gt;uv run script.py&lt;/code&gt; 已经足够。需要长期维护的项目，再把 lock 文件和 &lt;code&gt;pyproject.toml&lt;/code&gt; 一起认真管理。&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>《蓝色时期》读后：画画这件事的重量</title>
    <link href="https://hoshikuzu.tech/acgn/manga/blue-period-review/" rel="alternate" type="text/html"/>
    <id>https://hoshikuzu.tech/acgn/manga/blue-period-review/</id>
    <published>2026-10-10T00:00:00Z</published>
    <updated>2026-10-10T00:00:00Z</updated>
    <summary>它没有把「追梦」写成热血口号，而是把时间、金钱、天赋和自我怀疑一起放到画布旁边。</summary>
    <content type="html">&lt;p&gt;《蓝色时期》最难得的地方，是它没有把「画画」浪漫化。&lt;/p&gt;
&lt;p&gt;主角决定考美术大学之后，作品花了很多篇幅处理那些不浪漫的部分：学费、补习班的费用、睡眠不足、和同学比较时的窒息感，以及「我到底有没有才能」这种没有标准答案的问题。&lt;/p&gt;
&lt;h2 id=&quot;画面之外的成本&quot; tabindex=&quot;-1&quot;&gt;画面之外的成本&lt;/h2&gt;
&lt;p&gt;很多作品会把艺术创作写成一种纯粹的精神活动。这里不是。颜料要钱，画布要钱，考试要报名费，时间更是要从别的地方挪过来。&lt;/p&gt;
&lt;p&gt;我喜欢它把这些成本摆在明面上。不是因为这样更残酷，而是因为只有承认成本，选择才显得真实。&lt;/p&gt;
&lt;h2 id=&quot;关于才能&quot; tabindex=&quot;-1&quot;&gt;关于才能&lt;/h2&gt;
&lt;p&gt;作品里有一个很准确的观察：才能并不是「天生会画」，而是「在同样的时间里，能看见更多东西」。&lt;/p&gt;
&lt;p&gt;这让人稍微安心一点，也让人更不安。因为它把问题从「我有没有天赋」变成了「我愿不愿意持续地看」。&lt;/p&gt;
&lt;aside class=&quot;callout callout--note&quot;&gt;
  &lt;p class=&quot;callout__title&quot;&gt;提示&lt;/p&gt;
&lt;p&gt;读到第 12 卷，仍然觉得它最好的部分不是考试结果，而是角色们在画室外面那些沉默的瞬间。&lt;/p&gt;
&lt;/aside&gt;
&lt;h2 id=&quot;暂时的小结&quot; tabindex=&quot;-1&quot;&gt;暂时的小结&lt;/h2&gt;
&lt;p&gt;我还没有读完，但已经可以确定它会留在我的书架上。它适合在重新拿起画笔之前读，也适合在不想画画的时候读。&lt;/p&gt;
&lt;p&gt;评分先给 9/10，等读完再改。&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>最近收藏的几个开源小工具</title>
    <link href="https://hoshikuzu.tech/tech/share/open-source-picks/" rel="alternate" type="text/html"/>
    <id>https://hoshikuzu.tech/tech/share/open-source-picks/</id>
    <published>2026-10-08T00:00:00Z</published>
    <updated>2026-10-08T00:00:00Z</updated>
    <summary>一些装了就一直在用、没有存在感的命令行工具。不是榜单，只是个人收藏。</summary>
    <content type="html">&lt;p&gt;我喜欢那种「装完就忘记它存在」的工具：不抢注意力，但每次需要时都在。&lt;/p&gt;
&lt;p&gt;下面这些是我最近一年用得比较多的，都是开源项目。&lt;/p&gt;
&lt;h2 id=&quot;终端&quot; tabindex=&quot;-1&quot;&gt;终端&lt;/h2&gt;
&lt;div class=&quot;table-wrap&quot;&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;工具&lt;/th&gt;
&lt;th&gt;用途&lt;/th&gt;
&lt;th&gt;链接&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ripgrep&lt;/td&gt;
&lt;td&gt;更快的 grep&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/BurntSushi/ripgrep&quot;&gt;BurntSushi/ripgrep&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;fd&lt;/td&gt;
&lt;td&gt;更友好的 find&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/sharkdp/fd&quot;&gt;sharkdp/fd&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bat&lt;/td&gt;
&lt;td&gt;带高亮和行号的 cat&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/sharkdp/bat&quot;&gt;sharkdp/bat&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;zoxide&lt;/td&gt;
&lt;td&gt;用过的目录快速跳转&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/ajeetdsouza/zoxide&quot;&gt;ajeetdsouza/zoxide&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;fzf&lt;/td&gt;
&lt;td&gt;模糊查找&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/junegunn/fzf&quot;&gt;junegunn/fzf&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h2 id=&quot;开发&quot; tabindex=&quot;-1&quot;&gt;开发&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;delta&lt;/strong&gt;：让 &lt;code&gt;git diff&lt;/code&gt; 更好读。配合 &lt;code&gt;bat&lt;/code&gt; 的主题很舒服。&lt;a href=&quot;https://github.com/dandavison/delta&quot;&gt;dandavison/delta&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;starship&lt;/strong&gt;：跨 shell 的提示符，配置一次就能用很久。&lt;a href=&quot;https://github.com/starship/starship&quot;&gt;starship/starship&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;just&lt;/strong&gt;：比 Makefile 更适合放日常命令。&lt;a href=&quot;https://github.com/casey/just&quot;&gt;casey/just&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;uv&lt;/strong&gt;：Python 环境和依赖管理，速度很快。&lt;a href=&quot;https://github.com/astral-sh/uv&quot;&gt;astral-sh/uv&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;一点点使用习惯&quot; tabindex=&quot;-1&quot;&gt;一点点使用习惯&lt;/h2&gt;
&lt;aside class=&quot;callout callout--tip&quot;&gt;
  &lt;p class=&quot;callout__title&quot;&gt;小贴士&lt;/p&gt;
&lt;p&gt;不要一次装太多。先挑一个最常用的场景，用一周，再决定要不要留下。工具的价值在于减少摩擦，而不是增加收藏。&lt;/p&gt;
&lt;/aside&gt;
&lt;h2 id=&quot;最近想试的&quot; tabindex=&quot;-1&quot;&gt;最近想试的&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;zellij&lt;/code&gt;：终端复用器，想看看和 tmux 的差异。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;atuin&lt;/code&gt;：带同步的 shell 历史搜索。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mise&lt;/code&gt;：多语言版本管理，想用来替代几套分散的版本工具。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些小工具不改变工作流，但会悄悄减少一些重复动作。对我来说，这就够了。&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>《哈迪斯》玩后感：死亡作为叙事节奏</title>
    <link href="https://hoshikuzu.tech/acgn/game/hades-review/" rel="alternate" type="text/html"/>
    <id>https://hoshikuzu.tech/acgn/game/hades-review/</id>
    <published>2026-10-02T00:00:00Z</published>
    <updated>2026-10-02T00:00:00Z</updated>
    <summary>它把 Roguelike 的「反复失败」变成了叙事的一部分。每次死回去，故事都往前挪一点。</summary>
    <content type="html">&lt;p&gt;很多 Roguelike 把死亡当作失败的代价，哈迪斯把它当作叙事节奏。&lt;/p&gt;
&lt;h2 id=&quot;死亡不是重来&quot; tabindex=&quot;-1&quot;&gt;死亡不是重来&lt;/h2&gt;
&lt;p&gt;主角每次逃出冥界失败，都会回到大厅。角色们记得上一次发生的事，对话会变化，关系会推进。于是「再来一局」不只是数值成长，也是故事继续。&lt;/p&gt;
&lt;p&gt;这一点很难得。它让重复游玩有了情绪上的理由，而不只是「下一把会更强」。&lt;/p&gt;
&lt;h2 id=&quot;战斗手感&quot; tabindex=&quot;-1&quot;&gt;战斗手感&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;冲刺取消后摇，让移动本身很有快感。&lt;/li&gt;
&lt;li&gt;不同武器的节奏差异明显，不是换皮。&lt;/li&gt;
&lt;li&gt;祝福组合的随机性有边界，至少不会完全无法成型。&lt;/li&gt;
&lt;/ul&gt;
&lt;aside class=&quot;callout callout--note&quot;&gt;
  &lt;p class=&quot;callout__title&quot;&gt;提示&lt;/p&gt;
&lt;p&gt;我通关用的是盾牌。第一次觉得「稳」也可以很好玩。&lt;/p&gt;
&lt;/aside&gt;
&lt;h2 id=&quot;小遗憾&quot; tabindex=&quot;-1&quot;&gt;小遗憾&lt;/h2&gt;
&lt;p&gt;中后期的资源种类有点多，第一次玩时会在大厅里花不少时间做选择。虽然这也是一种节奏，但偶尔会打断战斗的连续性。&lt;/p&gt;
&lt;p&gt;评分 9/10。它是我会愿意反复打开的那类游戏。&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>《冰菓》读后：日常之谜与灰色的青春</title>
    <link href="https://hoshikuzu.tech/acgn/novel/hyouka-review/" rel="alternate" type="text/html"/>
    <id>https://hoshikuzu.tech/acgn/novel/hyouka-review/</id>
    <published>2026-09-30T00:00:00Z</published>
    <updated>2026-09-30T00:00:00Z</updated>
    <summary>没有杀人事件的推理，也可以很好看。它关心的是一个人如何面对自己的「不情愿」。</summary>
    <content type="html">&lt;p&gt;《冰菓》最好的地方，是它把推理从「找出凶手」拉回到「理解一个人」。&lt;/p&gt;
&lt;h2 id=&quot;日常之谜&quot; tabindex=&quot;-1&quot;&gt;日常之谜&lt;/h2&gt;
&lt;p&gt;社团活动、校园祭、为什么会被叫去帮忙，这些看起来很小的事，背后都有一点点人心的褶皱。&lt;/p&gt;
&lt;p&gt;它不是靠离奇来吸引人，而是靠「这件事为什么会变成这样」的耐心。&lt;/p&gt;
&lt;h2 id=&quot;灰色的青春&quot; tabindex=&quot;-1&quot;&gt;灰色的青春&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;我并不是不想知道，只是觉得知道了也不会改变什么。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;折木的节能主义，很容易被读成懒。但作品一直在追问：这种懒，是性格，还是一种保护？&lt;/p&gt;
&lt;h2 id=&quot;读完以后&quot; tabindex=&quot;-1&quot;&gt;读完以后&lt;/h2&gt;
&lt;p&gt;我喜欢的不是某个谜底，而是角色们在解开谜底之后，关系发生的那一点偏移。&lt;/p&gt;
&lt;p&gt;评分 9/10。适合在安静的下午读，不适合赶时间的时候读。&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>《人类简史》重读：叙事的力量</title>
    <link href="https://hoshikuzu.tech/media/history/sapiens-reread/" rel="alternate" type="text/html"/>
    <id>https://hoshikuzu.tech/media/history/sapiens-reread/</id>
    <published>2026-09-26T00:00:00Z</published>
    <updated>2026-09-26T00:00:00Z</updated>
    <summary>重读之后，最在意的不是那些宏大的阶段划分，而是「共同想象」如何让陌生人合作。</summary>
    <content type="html">&lt;p&gt;第一次读《人类简史》时，我记住的是几个大阶段：认知革命、农业革命、科学革命。重读之后，最在意的反而是书里一个很小的概念：共同想象。&lt;/p&gt;
&lt;h2 id=&quot;陌生人如何合作&quot; tabindex=&quot;-1&quot;&gt;陌生人如何合作&lt;/h2&gt;
&lt;p&gt;人可以在短时间内相信一个并不存在的东西：国家、公司、货币、法律。正因为这些「故事」被足够多的人接受，大规模协作才成为可能。&lt;/p&gt;
&lt;p&gt;这个视角很好用。它既能解释历史，也能解释今天很多看起来理所当然的制度。&lt;/p&gt;
&lt;h2 id=&quot;我不太同意的地方&quot; tabindex=&quot;-1&quot;&gt;我不太同意的地方&lt;/h2&gt;
&lt;p&gt;书里的一些判断下得很干脆，读起来很爽，但也容易把复杂的历史压成一条线。作为入门书很好，作为结论则要谨慎。&lt;/p&gt;
&lt;aside class=&quot;callout callout--note&quot;&gt;
  &lt;p class=&quot;callout__title&quot;&gt;提示&lt;/p&gt;
&lt;p&gt;这次读的是中文版。翻译整体流畅，但个别术语的取舍会改变论证的语气，之后想对照英文版看看。&lt;/p&gt;
&lt;/aside&gt;
&lt;h2 id=&quot;评分&quot; tabindex=&quot;-1&quot;&gt;评分&lt;/h2&gt;
&lt;p&gt;8/10。适合当作思考的起点，不适合当作终点。&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>《沉思录》札记：把注意力收回自己</title>
    <link href="https://hoshikuzu.tech/media/philosophy/meditations-notes/" rel="alternate" type="text/html"/>
    <id>https://hoshikuzu.tech/media/philosophy/meditations-notes/</id>
    <published>2026-09-20T00:00:00Z</published>
    <updated>2026-09-20T00:00:00Z</updated>
    <summary>不是一本读完就会变得平静的书，但它反复提醒：你能控制的比想象中少，也比想象中多。</summary>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;你对世界的判断，往往比世界本身更影响你。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;读《沉思录》时，我把这句话抄在了本子上。它不新鲜，但在焦虑的时候有用。&lt;/p&gt;
&lt;h2 id=&quot;能控制与不能控制&quot; tabindex=&quot;-1&quot;&gt;能控制与不能控制&lt;/h2&gt;
&lt;p&gt;书里反复区分两件事：自己的判断、选择、行动，以及外部事件、他人的看法、结果。&lt;/p&gt;
&lt;p&gt;这个区分并不解决所有问题，但它能把注意力从「为什么事情会这样」拉回到「我接下来做什么」。&lt;/p&gt;
&lt;h2 id=&quot;读法&quot; tabindex=&quot;-1&quot;&gt;读法&lt;/h2&gt;
&lt;p&gt;这本书不适合一口气读完。它更像一本反复翻的笔记，每次读一两页，刚好。&lt;/p&gt;
&lt;aside class=&quot;callout callout--note&quot;&gt;
  &lt;p class=&quot;callout__title&quot;&gt;提示&lt;/p&gt;
&lt;p&gt;我读的是节译本，之后想找一个更完整的版本。不同译本的语气差别很大，可能会影响阅读体验。&lt;/p&gt;
&lt;/aside&gt;
&lt;h2 id=&quot;评分&quot; tabindex=&quot;-1&quot;&gt;评分&lt;/h2&gt;
&lt;p&gt;8/10。不是因为它给了答案，而是因为它把问题问得足够清楚。&lt;/p&gt;
</content>
  </entry>
  
</feed>
