This commit is contained in:
krahets
2024-03-18 03:11:11 +08:00
parent 2980b1515a
commit 60eb82b66b
123 changed files with 2286 additions and 2115 deletions

View File

@@ -2138,7 +2138,7 @@
<div class="highlight"><span class="filename">linked_list.rs</span><pre><span></span><code><a id="__codelineno-33-1" name="__codelineno-33-1" href="#__codelineno-33-1"></a><span class="cm">/* 在链表的节点 n0 之后插入节点 P */</span>
<a id="__codelineno-33-2" name="__codelineno-33-2" href="#__codelineno-33-2"></a><span class="cp">#[allow(non_snake_case)]</span>
<a id="__codelineno-33-3" name="__codelineno-33-3" href="#__codelineno-33-3"></a><span class="k">pub</span><span class="w"> </span><span class="k">fn</span> <span class="nf">insert</span><span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;</span><span class="p">(</span><span class="n">n0</span>: <span class="kp">&amp;</span><span class="nc">Rc</span><span class="o">&lt;</span><span class="n">RefCell</span><span class="o">&lt;</span><span class="n">ListNode</span><span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;&gt;&gt;</span><span class="p">,</span><span class="w"> </span><span class="n">P</span>: <span class="nc">Rc</span><span class="o">&lt;</span><span class="n">RefCell</span><span class="o">&lt;</span><span class="n">ListNode</span><span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;&gt;&gt;</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-33-4" name="__codelineno-33-4" href="#__codelineno-33-4"></a><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="n">n1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">n0</span><span class="p">.</span><span class="n">borrow_mut</span><span class="p">().</span><span class="n">next</span><span class="p">.</span><span class="n">take</span><span class="p">();</span>
<a id="__codelineno-33-4" name="__codelineno-33-4" href="#__codelineno-33-4"></a><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="n">n1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">n0</span><span class="p">.</span><span class="n">borrow_mut</span><span class="p">().</span><span class="n">next</span><span class="p">.</span><span class="n">take</span><span class="p">();</span>
<a id="__codelineno-33-5" name="__codelineno-33-5" href="#__codelineno-33-5"></a><span class="w"> </span><span class="n">P</span><span class="p">.</span><span class="n">borrow_mut</span><span class="p">().</span><span class="n">next</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">n1</span><span class="p">;</span>
<a id="__codelineno-33-6" name="__codelineno-33-6" href="#__codelineno-33-6"></a><span class="w"> </span><span class="n">n0</span><span class="p">.</span><span class="n">borrow_mut</span><span class="p">().</span><span class="n">next</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">Some</span><span class="p">(</span><span class="n">P</span><span class="p">);</span>
<a id="__codelineno-33-7" name="__codelineno-33-7" href="#__codelineno-33-7"></a><span class="p">}</span>
@@ -2292,14 +2292,16 @@
<div class="highlight"><span class="filename">linked_list.rs</span><pre><span></span><code><a id="__codelineno-45-1" name="__codelineno-45-1" href="#__codelineno-45-1"></a><span class="cm">/* 删除链表的节点 n0 之后的首个节点 */</span>
<a id="__codelineno-45-2" name="__codelineno-45-2" href="#__codelineno-45-2"></a><span class="cp">#[allow(non_snake_case)]</span>
<a id="__codelineno-45-3" name="__codelineno-45-3" href="#__codelineno-45-3"></a><span class="k">pub</span><span class="w"> </span><span class="k">fn</span> <span class="nf">remove</span><span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;</span><span class="p">(</span><span class="n">n0</span>: <span class="kp">&amp;</span><span class="nc">Rc</span><span class="o">&lt;</span><span class="n">RefCell</span><span class="o">&lt;</span><span class="n">ListNode</span><span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;&gt;&gt;</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-45-4" name="__codelineno-45-4" href="#__codelineno-45-4"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">n0</span><span class="p">.</span><span class="n">borrow</span><span class="p">().</span><span class="n">next</span><span class="p">.</span><span class="n">is_none</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="k">return</span><span class="p">};</span>
<a id="__codelineno-45-5" name="__codelineno-45-5" href="#__codelineno-45-5"></a><span class="w"> </span><span class="c1">// n0 -&gt; P -&gt; n1</span>
<a id="__codelineno-45-6" name="__codelineno-45-6" href="#__codelineno-45-6"></a><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="n">P</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">n0</span><span class="p">.</span><span class="n">borrow_mut</span><span class="p">().</span><span class="n">next</span><span class="p">.</span><span class="n">take</span><span class="p">();</span>
<a id="__codelineno-45-7" name="__codelineno-45-7" href="#__codelineno-45-7"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nb">Some</span><span class="p">(</span><span class="n">node</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">P</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-45-8" name="__codelineno-45-8" href="#__codelineno-45-8"></a><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="n">n1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">node</span><span class="p">.</span><span class="n">borrow_mut</span><span class="p">().</span><span class="n">next</span><span class="p">.</span><span class="n">take</span><span class="p">();</span>
<a id="__codelineno-45-9" name="__codelineno-45-9" href="#__codelineno-45-9"></a><span class="w"> </span><span class="n">n0</span><span class="p">.</span><span class="n">borrow_mut</span><span class="p">().</span><span class="n">next</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">n1</span><span class="p">;</span>
<a id="__codelineno-45-10" name="__codelineno-45-10" href="#__codelineno-45-10"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-45-11" name="__codelineno-45-11" href="#__codelineno-45-11"></a><span class="p">}</span>
<a id="__codelineno-45-4" name="__codelineno-45-4" href="#__codelineno-45-4"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">n0</span><span class="p">.</span><span class="n">borrow</span><span class="p">().</span><span class="n">next</span><span class="p">.</span><span class="n">is_none</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-45-5" name="__codelineno-45-5" href="#__codelineno-45-5"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span>
<a id="__codelineno-45-6" name="__codelineno-45-6" href="#__codelineno-45-6"></a><span class="w"> </span><span class="p">};</span>
<a id="__codelineno-45-7" name="__codelineno-45-7" href="#__codelineno-45-7"></a><span class="w"> </span><span class="c1">// n0 -&gt; P -&gt; n1</span>
<a id="__codelineno-45-8" name="__codelineno-45-8" href="#__codelineno-45-8"></a><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="n">P</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">n0</span><span class="p">.</span><span class="n">borrow_mut</span><span class="p">().</span><span class="n">next</span><span class="p">.</span><span class="n">take</span><span class="p">();</span>
<a id="__codelineno-45-9" name="__codelineno-45-9" href="#__codelineno-45-9"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nb">Some</span><span class="p">(</span><span class="n">node</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">P</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-45-10" name="__codelineno-45-10" href="#__codelineno-45-10"></a><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="n">n1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">node</span><span class="p">.</span><span class="n">borrow_mut</span><span class="p">().</span><span class="n">next</span><span class="p">.</span><span class="n">take</span><span class="p">();</span>
<a id="__codelineno-45-11" name="__codelineno-45-11" href="#__codelineno-45-11"></a><span class="w"> </span><span class="n">n0</span><span class="p">.</span><span class="n">borrow_mut</span><span class="p">().</span><span class="n">next</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">n1</span><span class="p">;</span>
<a id="__codelineno-45-12" name="__codelineno-45-12" href="#__codelineno-45-12"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-45-13" name="__codelineno-45-13" href="#__codelineno-45-13"></a><span class="p">}</span>
</code></pre></div>
</div>
<div class="tabbed-block">
@@ -2452,12 +2454,15 @@
<div class="tabbed-block">
<div class="highlight"><span class="filename">linked_list.rs</span><pre><span></span><code><a id="__codelineno-57-1" name="__codelineno-57-1" href="#__codelineno-57-1"></a><span class="cm">/* 访问链表中索引为 index 的节点 */</span>
<a id="__codelineno-57-2" name="__codelineno-57-2" href="#__codelineno-57-2"></a><span class="k">pub</span><span class="w"> </span><span class="k">fn</span> <span class="nf">access</span><span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;</span><span class="p">(</span><span class="n">head</span>: <span class="nc">Rc</span><span class="o">&lt;</span><span class="n">RefCell</span><span class="o">&lt;</span><span class="n">ListNode</span><span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;&gt;&gt;</span><span class="p">,</span><span class="w"> </span><span class="n">index</span>: <span class="kt">i32</span><span class="p">)</span><span class="w"> </span>-&gt; <span class="nc">Rc</span><span class="o">&lt;</span><span class="n">RefCell</span><span class="o">&lt;</span><span class="n">ListNode</span><span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;&gt;&gt;</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-57-3" name="__codelineno-57-3" href="#__codelineno-57-3"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">index</span><span class="w"> </span><span class="o">&lt;=</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="p">{</span><span class="k">return</span><span class="w"> </span><span class="n">head</span><span class="p">};</span>
<a id="__codelineno-57-4" name="__codelineno-57-4" href="#__codelineno-57-4"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nb">Some</span><span class="p">(</span><span class="n">node</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">&amp;</span><span class="n">head</span><span class="p">.</span><span class="n">borrow_mut</span><span class="p">().</span><span class="n">next</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-57-5" name="__codelineno-57-5" href="#__codelineno-57-5"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">access</span><span class="p">(</span><span class="n">node</span><span class="p">.</span><span class="n">clone</span><span class="p">(),</span><span class="w"> </span><span class="n">index</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span>
<a id="__codelineno-57-6" name="__codelineno-57-6" href="#__codelineno-57-6"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-57-7" name="__codelineno-57-7" href="#__codelineno-57-7"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">head</span><span class="p">;</span>
<a id="__codelineno-57-8" name="__codelineno-57-8" href="#__codelineno-57-8"></a><span class="p">}</span>
<a id="__codelineno-57-3" name="__codelineno-57-3" href="#__codelineno-57-3"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">index</span><span class="w"> </span><span class="o">&lt;=</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-57-4" name="__codelineno-57-4" href="#__codelineno-57-4"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">head</span><span class="p">;</span>
<a id="__codelineno-57-5" name="__codelineno-57-5" href="#__codelineno-57-5"></a><span class="w"> </span><span class="p">};</span>
<a id="__codelineno-57-6" name="__codelineno-57-6" href="#__codelineno-57-6"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nb">Some</span><span class="p">(</span><span class="n">node</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">&amp;</span><span class="n">head</span><span class="p">.</span><span class="n">borrow</span><span class="p">().</span><span class="n">next</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-57-7" name="__codelineno-57-7" href="#__codelineno-57-7"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">access</span><span class="p">(</span><span class="n">node</span><span class="p">.</span><span class="n">clone</span><span class="p">(),</span><span class="w"> </span><span class="n">index</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span>
<a id="__codelineno-57-8" name="__codelineno-57-8" href="#__codelineno-57-8"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-57-9" name="__codelineno-57-9" href="#__codelineno-57-9"></a>
<a id="__codelineno-57-10" name="__codelineno-57-10" href="#__codelineno-57-10"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">head</span><span class="p">;</span>
<a id="__codelineno-57-11" name="__codelineno-57-11" href="#__codelineno-57-11"></a><span class="p">}</span>
</code></pre></div>
</div>
<div class="tabbed-block">
@@ -2629,12 +2634,14 @@
<div class="tabbed-block">
<div class="highlight"><span class="filename">linked_list.rs</span><pre><span></span><code><a id="__codelineno-69-1" name="__codelineno-69-1" href="#__codelineno-69-1"></a><span class="cm">/* 在链表中查找值为 target 的首个节点 */</span>
<a id="__codelineno-69-2" name="__codelineno-69-2" href="#__codelineno-69-2"></a><span class="k">pub</span><span class="w"> </span><span class="k">fn</span> <span class="nf">find</span><span class="o">&lt;</span><span class="n">T</span>: <span class="nb">PartialEq</span><span class="o">&gt;</span><span class="p">(</span><span class="n">head</span>: <span class="nc">Rc</span><span class="o">&lt;</span><span class="n">RefCell</span><span class="o">&lt;</span><span class="n">ListNode</span><span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;&gt;&gt;</span><span class="p">,</span><span class="w"> </span><span class="n">target</span>: <span class="nc">T</span><span class="p">,</span><span class="w"> </span><span class="n">index</span>: <span class="kt">i32</span><span class="p">)</span><span class="w"> </span>-&gt; <span class="kt">i32</span> <span class="p">{</span>
<a id="__codelineno-69-3" name="__codelineno-69-3" href="#__codelineno-69-3"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">head</span><span class="p">.</span><span class="n">borrow</span><span class="p">().</span><span class="n">val</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">target</span><span class="w"> </span><span class="p">{</span><span class="k">return</span><span class="w"> </span><span class="n">index</span><span class="p">};</span>
<a id="__codelineno-69-4" name="__codelineno-69-4" href="#__codelineno-69-4"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nb">Some</span><span class="p">(</span><span class="n">node</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">&amp;</span><span class="n">head</span><span class="p">.</span><span class="n">borrow_mut</span><span class="p">().</span><span class="n">next</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-69-5" name="__codelineno-69-5" href="#__codelineno-69-5"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">find</span><span class="p">(</span><span class="n">node</span><span class="p">.</span><span class="n">clone</span><span class="p">(),</span><span class="w"> </span><span class="n">target</span><span class="p">,</span><span class="w"> </span><span class="n">index</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span>
<a id="__codelineno-69-6" name="__codelineno-69-6" href="#__codelineno-69-6"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-69-7" name="__codelineno-69-7" href="#__codelineno-69-7"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="o">-</span><span class="mi">1</span><span class="p">;</span>
<a id="__codelineno-69-8" name="__codelineno-69-8" href="#__codelineno-69-8"></a><span class="p">}</span>
<a id="__codelineno-69-3" name="__codelineno-69-3" href="#__codelineno-69-3"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">head</span><span class="p">.</span><span class="n">borrow</span><span class="p">().</span><span class="n">val</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">target</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-69-4" name="__codelineno-69-4" href="#__codelineno-69-4"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">index</span><span class="p">;</span>
<a id="__codelineno-69-5" name="__codelineno-69-5" href="#__codelineno-69-5"></a><span class="w"> </span><span class="p">};</span>
<a id="__codelineno-69-6" name="__codelineno-69-6" href="#__codelineno-69-6"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nb">Some</span><span class="p">(</span><span class="n">node</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">&amp;</span><span class="n">head</span><span class="p">.</span><span class="n">borrow_mut</span><span class="p">().</span><span class="n">next</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-69-7" name="__codelineno-69-7" href="#__codelineno-69-7"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">find</span><span class="p">(</span><span class="n">node</span><span class="p">.</span><span class="n">clone</span><span class="p">(),</span><span class="w"> </span><span class="n">target</span><span class="p">,</span><span class="w"> </span><span class="n">index</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span>
<a id="__codelineno-69-8" name="__codelineno-69-8" href="#__codelineno-69-8"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-69-9" name="__codelineno-69-9" href="#__codelineno-69-9"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="o">-</span><span class="mi">1</span><span class="p">;</span>
<a id="__codelineno-69-10" name="__codelineno-69-10" href="#__codelineno-69-10"></a><span class="p">}</span>
</code></pre></div>
</div>
<div class="tabbed-block">

View File

@@ -3308,16 +3308,16 @@
<a id="__codelineno-81-2" name="__codelineno-81-2" href="#__codelineno-81-2"></a><span class="cp">#[allow(dead_code)]</span>
<a id="__codelineno-81-3" name="__codelineno-81-3" href="#__codelineno-81-3"></a><span class="k">struct</span> <span class="nc">MyList</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-81-4" name="__codelineno-81-4" href="#__codelineno-81-4"></a><span class="w"> </span><span class="n">arr</span>: <span class="nb">Vec</span><span class="o">&lt;</span><span class="kt">i32</span><span class="o">&gt;</span><span class="p">,</span><span class="w"> </span><span class="c1">// 数组(存储列表元素)</span>
<a id="__codelineno-81-5" name="__codelineno-81-5" href="#__codelineno-81-5"></a><span class="w"> </span><span class="n">capacity</span>: <span class="kt">usize</span><span class="p">,</span><span class="w"> </span><span class="c1">// 列表容量</span>
<a id="__codelineno-81-6" name="__codelineno-81-6" href="#__codelineno-81-6"></a><span class="w"> </span><span class="n">size</span>: <span class="kt">usize</span><span class="p">,</span><span class="w"> </span><span class="c1">// 列表长度(当前元素数量)</span>
<a id="__codelineno-81-7" name="__codelineno-81-7" href="#__codelineno-81-7"></a><span class="w"> </span><span class="n">extend_ratio</span>: <span class="kt">usize</span><span class="p">,</span><span class="w"> </span><span class="c1">// 每次列表扩容的倍数</span>
<a id="__codelineno-81-5" name="__codelineno-81-5" href="#__codelineno-81-5"></a><span class="w"> </span><span class="n">capacity</span>: <span class="kt">usize</span><span class="p">,</span><span class="w"> </span><span class="c1">// 列表容量</span>
<a id="__codelineno-81-6" name="__codelineno-81-6" href="#__codelineno-81-6"></a><span class="w"> </span><span class="n">size</span>: <span class="kt">usize</span><span class="p">,</span><span class="w"> </span><span class="c1">// 列表长度(当前元素数量)</span>
<a id="__codelineno-81-7" name="__codelineno-81-7" href="#__codelineno-81-7"></a><span class="w"> </span><span class="n">extend_ratio</span>: <span class="kt">usize</span><span class="p">,</span><span class="w"> </span><span class="c1">// 每次列表扩容的倍数</span>
<a id="__codelineno-81-8" name="__codelineno-81-8" href="#__codelineno-81-8"></a><span class="p">}</span>
<a id="__codelineno-81-9" name="__codelineno-81-9" href="#__codelineno-81-9"></a>
<a id="__codelineno-81-10" name="__codelineno-81-10" href="#__codelineno-81-10"></a><span class="cp">#[allow(unused,unused_comparisons)]</span>
<a id="__codelineno-81-10" name="__codelineno-81-10" href="#__codelineno-81-10"></a><span class="cp">#[allow(unused, unused_comparisons)]</span>
<a id="__codelineno-81-11" name="__codelineno-81-11" href="#__codelineno-81-11"></a><span class="k">impl</span><span class="w"> </span><span class="n">MyList</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-81-12" name="__codelineno-81-12" href="#__codelineno-81-12"></a><span class="w"> </span><span class="cm">/* 构造方法 */</span>
<a id="__codelineno-81-13" name="__codelineno-81-13" href="#__codelineno-81-13"></a><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="k">fn</span> <span class="nf">new</span><span class="p">(</span><span class="n">capacity</span>: <span class="kt">usize</span><span class="p">)</span><span class="w"> </span>-&gt; <span class="nc">Self</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-81-14" name="__codelineno-81-14" href="#__codelineno-81-14"></a><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">vec</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">Vec</span>::<span class="n">new</span><span class="p">();</span><span class="w"> </span>
<a id="__codelineno-81-14" name="__codelineno-81-14" href="#__codelineno-81-14"></a><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">vec</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">Vec</span>::<span class="n">new</span><span class="p">();</span>
<a id="__codelineno-81-15" name="__codelineno-81-15" href="#__codelineno-81-15"></a><span class="w"> </span><span class="n">vec</span><span class="p">.</span><span class="n">resize</span><span class="p">(</span><span class="n">capacity</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">);</span>
<a id="__codelineno-81-16" name="__codelineno-81-16" href="#__codelineno-81-16"></a><span class="w"> </span><span class="bp">Self</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-81-17" name="__codelineno-81-17" href="#__codelineno-81-17"></a><span class="w"> </span><span class="n">arr</span>: <span class="nc">vec</span><span class="p">,</span>
@@ -3340,76 +3340,84 @@
<a id="__codelineno-81-34" name="__codelineno-81-34" href="#__codelineno-81-34"></a><span class="w"> </span><span class="cm">/* 访问元素 */</span>
<a id="__codelineno-81-35" name="__codelineno-81-35" href="#__codelineno-81-35"></a><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="k">fn</span> <span class="nf">get</span><span class="p">(</span><span class="o">&amp;</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">index</span>: <span class="kt">usize</span><span class="p">)</span><span class="w"> </span>-&gt; <span class="kt">i32</span> <span class="p">{</span>
<a id="__codelineno-81-36" name="__codelineno-81-36" href="#__codelineno-81-36"></a><span class="w"> </span><span class="c1">// 索引如果越界,则抛出异常,下同</span>
<a id="__codelineno-81-37" name="__codelineno-81-37" href="#__codelineno-81-37"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">index</span><span class="w"> </span><span class="o">&gt;=</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">size</span><span class="w"> </span><span class="p">{</span><span class="fm">panic!</span><span class="p">(</span><span class="s">&quot;索引越界&quot;</span><span class="p">)};</span>
<a id="__codelineno-81-38" name="__codelineno-81-38" href="#__codelineno-81-38"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">arr</span><span class="p">[</span><span class="n">index</span><span class="p">];</span>
<a id="__codelineno-81-39" name="__codelineno-81-39" href="#__codelineno-81-39"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-81-40" name="__codelineno-81-40" href="#__codelineno-81-40"></a>
<a id="__codelineno-81-41" name="__codelineno-81-41" href="#__codelineno-81-41"></a><span class="w"> </span><span class="cm">/* 更新元素 */</span>
<a id="__codelineno-81-42" name="__codelineno-81-42" href="#__codelineno-81-42"></a><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="k">fn</span> <span class="nf">set</span><span class="p">(</span><span class="o">&amp;</span><span class="k">mut</span><span class="w"> </span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">index</span>: <span class="kt">usize</span><span class="p">,</span><span class="w"> </span><span class="n">num</span>: <span class="kt">i32</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-81-43" name="__codelineno-81-43" href="#__codelineno-81-43"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">index</span><span class="w"> </span><span class="o">&gt;=</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">size</span><span class="w"> </span><span class="p">{</span><span class="fm">panic!</span><span class="p">(</span><span class="s">&quot;索引越界&quot;</span><span class="p">)};</span>
<a id="__codelineno-81-44" name="__codelineno-81-44" href="#__codelineno-81-44"></a><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">arr</span><span class="p">[</span><span class="n">index</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">num</span><span class="p">;</span>
<a id="__codelineno-81-45" name="__codelineno-81-45" href="#__codelineno-81-45"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-81-46" name="__codelineno-81-46" href="#__codelineno-81-46"></a>
<a id="__codelineno-81-47" name="__codelineno-81-47" href="#__codelineno-81-47"></a><span class="w"> </span><span class="cm">/* 在尾部添加元素 */</span>
<a id="__codelineno-81-48" name="__codelineno-81-48" href="#__codelineno-81-48"></a><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="k">fn</span> <span class="nf">add</span><span class="p">(</span><span class="o">&amp;</span><span class="k">mut</span><span class="w"> </span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">num</span>: <span class="kt">i32</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-81-49" name="__codelineno-81-49" href="#__codelineno-81-49"></a><span class="w"> </span><span class="c1">// 元素数量超出容量时,触发扩容机制</span>
<a id="__codelineno-81-50" name="__codelineno-81-50" href="#__codelineno-81-50"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">size</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">capacity</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-81-51" name="__codelineno-81-51" href="#__codelineno-81-51"></a><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">extend_capacity</span><span class="p">();</span>
<a id="__codelineno-81-52" name="__codelineno-81-52" href="#__codelineno-81-52"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-81-53" name="__codelineno-81-53" href="#__codelineno-81-53"></a><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">arr</span><span class="p">[</span><span class="bp">self</span><span class="p">.</span><span class="n">size</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">num</span><span class="p">;</span>
<a id="__codelineno-81-54" name="__codelineno-81-54" href="#__codelineno-81-54"></a><span class="w"> </span><span class="c1">// 更新元素数量</span>
<a id="__codelineno-81-55" name="__codelineno-81-55" href="#__codelineno-81-55"></a><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">size</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
<a id="__codelineno-81-56" name="__codelineno-81-56" href="#__codelineno-81-56"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-81-57" name="__codelineno-81-57" href="#__codelineno-81-57"></a>
<a id="__codelineno-81-58" name="__codelineno-81-58" href="#__codelineno-81-58"></a><span class="w"> </span><span class="cm">/* 在中间插入元素 */</span>
<a id="__codelineno-81-59" name="__codelineno-81-59" href="#__codelineno-81-59"></a><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="k">fn</span> <span class="nf">insert</span><span class="p">(</span><span class="o">&amp;</span><span class="k">mut</span><span class="w"> </span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">index</span>: <span class="kt">usize</span><span class="p">,</span><span class="w"> </span><span class="n">num</span>: <span class="kt">i32</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-81-60" name="__codelineno-81-60" href="#__codelineno-81-60"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">index</span><span class="w"> </span><span class="o">&gt;=</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">size</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="fm">panic!</span><span class="p">(</span><span class="s">&quot;索引越界&quot;</span><span class="p">)};</span>
<a id="__codelineno-81-61" name="__codelineno-81-61" href="#__codelineno-81-61"></a><span class="w"> </span><span class="c1">// 元素数量超出容量时,触发扩容机制</span>
<a id="__codelineno-81-62" name="__codelineno-81-62" href="#__codelineno-81-62"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">size</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">capacity</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-81-63" name="__codelineno-81-63" href="#__codelineno-81-63"></a><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">extend_capacity</span><span class="p">();</span>
<a id="__codelineno-81-64" name="__codelineno-81-64" href="#__codelineno-81-64"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-81-65" name="__codelineno-81-65" href="#__codelineno-81-65"></a><span class="w"> </span><span class="c1">// 将索引 index 以及之后的元素都向后移动一位</span>
<a id="__codelineno-81-66" name="__codelineno-81-66" href="#__codelineno-81-66"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">j</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="p">(</span><span class="n">index</span><span class="o">..</span><span class="bp">self</span><span class="p">.</span><span class="n">size</span><span class="p">).</span><span class="n">rev</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-81-67" name="__codelineno-81-67" href="#__codelineno-81-67"></a><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">arr</span><span class="p">[</span><span class="n">j</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">arr</span><span class="p">[</span><span class="n">j</span><span class="p">];</span>
<a id="__codelineno-81-68" name="__codelineno-81-68" href="#__codelineno-81-68"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-81-69" name="__codelineno-81-69" href="#__codelineno-81-69"></a><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">arr</span><span class="p">[</span><span class="n">index</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">num</span><span class="p">;</span>
<a id="__codelineno-81-70" name="__codelineno-81-70" href="#__codelineno-81-70"></a><span class="w"> </span><span class="c1">// 更新元素数量</span>
<a id="__codelineno-81-71" name="__codelineno-81-71" href="#__codelineno-81-71"></a><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">size</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
<a id="__codelineno-81-72" name="__codelineno-81-72" href="#__codelineno-81-72"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-81-73" name="__codelineno-81-73" href="#__codelineno-81-73"></a>
<a id="__codelineno-81-74" name="__codelineno-81-74" href="#__codelineno-81-74"></a><span class="w"> </span><span class="cm">/* 删除元素 */</span>
<a id="__codelineno-81-75" name="__codelineno-81-75" href="#__codelineno-81-75"></a><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="k">fn</span> <span class="nf">remove</span><span class="p">(</span><span class="o">&amp;</span><span class="k">mut</span><span class="w"> </span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">index</span>: <span class="kt">usize</span><span class="p">)</span><span class="w"> </span>-&gt; <span class="kt">i32</span> <span class="p">{</span>
<a id="__codelineno-81-76" name="__codelineno-81-76" href="#__codelineno-81-76"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">index</span><span class="w"> </span><span class="o">&gt;=</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">size</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="fm">panic!</span><span class="p">(</span><span class="s">&quot;索引越界&quot;</span><span class="p">)};</span>
<a id="__codelineno-81-77" name="__codelineno-81-77" href="#__codelineno-81-77"></a><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="n">num</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">arr</span><span class="p">[</span><span class="n">index</span><span class="p">];</span>
<a id="__codelineno-81-78" name="__codelineno-81-78" href="#__codelineno-81-78"></a><span class="w"> </span><span class="c1">// 将将索引 index 之后的元素都向前移动一位</span>
<a id="__codelineno-81-79" name="__codelineno-81-79" href="#__codelineno-81-79"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">j</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="p">(</span><span class="n">index</span><span class="o">..</span><span class="bp">self</span><span class="p">.</span><span class="n">size</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-81-80" name="__codelineno-81-80" href="#__codelineno-81-80"></a><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">arr</span><span class="p">[</span><span class="n">j</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">arr</span><span class="p">[</span><span class="n">j</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">];</span>
<a id="__codelineno-81-81" name="__codelineno-81-81" href="#__codelineno-81-81"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-81-82" name="__codelineno-81-82" href="#__codelineno-81-82"></a><span class="w"> </span><span class="c1">// 更新元素数量</span>
<a id="__codelineno-81-83" name="__codelineno-81-83" href="#__codelineno-81-83"></a><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">size</span><span class="w"> </span><span class="o">-=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
<a id="__codelineno-81-84" name="__codelineno-81-84" href="#__codelineno-81-84"></a><span class="w"> </span><span class="c1">// 返回被删除的元素</span>
<a id="__codelineno-81-85" name="__codelineno-81-85" href="#__codelineno-81-85"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">num</span><span class="p">;</span>
<a id="__codelineno-81-86" name="__codelineno-81-86" href="#__codelineno-81-86"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-81-87" name="__codelineno-81-87" href="#__codelineno-81-87"></a>
<a id="__codelineno-81-88" name="__codelineno-81-88" href="#__codelineno-81-88"></a><span class="w"> </span><span class="cm">/* 列表扩容 */</span>
<a id="__codelineno-81-89" name="__codelineno-81-89" href="#__codelineno-81-89"></a><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="k">fn</span> <span class="nf">extend_capacity</span><span class="p">(</span><span class="o">&amp;</span><span class="k">mut</span><span class="w"> </span><span class="bp">self</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-81-90" name="__codelineno-81-90" href="#__codelineno-81-90"></a><span class="w"> </span><span class="c1">// 新建一个长度为原数组 extend_ratio 倍的新数组,并将原数组复制到新数组</span>
<a id="__codelineno-81-91" name="__codelineno-81-91" href="#__codelineno-81-91"></a><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="n">new_capacity</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">capacity</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">extend_ratio</span><span class="p">;</span>
<a id="__codelineno-81-92" name="__codelineno-81-92" href="#__codelineno-81-92"></a><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">arr</span><span class="p">.</span><span class="n">resize</span><span class="p">(</span><span class="n">new_capacity</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">);</span>
<a id="__codelineno-81-93" name="__codelineno-81-93" href="#__codelineno-81-93"></a><span class="w"> </span><span class="c1">// 更新列表容量</span>
<a id="__codelineno-81-94" name="__codelineno-81-94" href="#__codelineno-81-94"></a><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">capacity</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">new_capacity</span><span class="p">;</span>
<a id="__codelineno-81-95" name="__codelineno-81-95" href="#__codelineno-81-95"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-81-96" name="__codelineno-81-96" href="#__codelineno-81-96"></a>
<a id="__codelineno-81-97" name="__codelineno-81-97" href="#__codelineno-81-97"></a><span class="w"> </span><span class="cm">/* 将列表转换为数组 */</span>
<a id="__codelineno-81-98" name="__codelineno-81-98" href="#__codelineno-81-98"></a><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="k">fn</span> <span class="nf">to_array</span><span class="p">(</span><span class="o">&amp;</span><span class="k">mut</span><span class="w"> </span><span class="bp">self</span><span class="p">)</span><span class="w"> </span>-&gt; <span class="nb">Vec</span><span class="o">&lt;</span><span class="kt">i32</span><span class="o">&gt;</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-81-99" name="__codelineno-81-99" href="#__codelineno-81-99"></a><span class="w"> </span><span class="c1">// 仅转换有效长度范围内的列表元素</span>
<a id="__codelineno-81-100" name="__codelineno-81-100" href="#__codelineno-81-100"></a><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">arr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">Vec</span>::<span class="n">new</span><span class="p">();</span>
<a id="__codelineno-81-101" name="__codelineno-81-101" href="#__codelineno-81-101"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="mi">0</span><span class="o">..</span><span class="bp">self</span><span class="p">.</span><span class="n">size</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-81-102" name="__codelineno-81-102" href="#__codelineno-81-102"></a><span class="w"> </span><span class="n">arr</span><span class="p">.</span><span class="n">push</span><span class="p">(</span><span class="bp">self</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="n">i</span><span class="p">));</span>
<a id="__codelineno-81-103" name="__codelineno-81-103" href="#__codelineno-81-103"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-81-104" name="__codelineno-81-104" href="#__codelineno-81-104"></a><span class="w"> </span><span class="n">arr</span>
<a id="__codelineno-81-105" name="__codelineno-81-105" href="#__codelineno-81-105"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-81-106" name="__codelineno-81-106" href="#__codelineno-81-106"></a><span class="p">}</span>
<a id="__codelineno-81-37" name="__codelineno-81-37" href="#__codelineno-81-37"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">index</span><span class="w"> </span><span class="o">&gt;=</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">size</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-81-38" name="__codelineno-81-38" href="#__codelineno-81-38"></a><span class="w"> </span><span class="fm">panic!</span><span class="p">(</span><span class="s">&quot;索引越界&quot;</span><span class="p">)</span>
<a id="__codelineno-81-39" name="__codelineno-81-39" href="#__codelineno-81-39"></a><span class="w"> </span><span class="p">};</span>
<a id="__codelineno-81-40" name="__codelineno-81-40" href="#__codelineno-81-40"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">arr</span><span class="p">[</span><span class="n">index</span><span class="p">];</span>
<a id="__codelineno-81-41" name="__codelineno-81-41" href="#__codelineno-81-41"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-81-42" name="__codelineno-81-42" href="#__codelineno-81-42"></a>
<a id="__codelineno-81-43" name="__codelineno-81-43" href="#__codelineno-81-43"></a><span class="w"> </span><span class="cm">/* 更新元素 */</span>
<a id="__codelineno-81-44" name="__codelineno-81-44" href="#__codelineno-81-44"></a><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="k">fn</span> <span class="nf">set</span><span class="p">(</span><span class="o">&amp;</span><span class="k">mut</span><span class="w"> </span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">index</span>: <span class="kt">usize</span><span class="p">,</span><span class="w"> </span><span class="n">num</span>: <span class="kt">i32</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-81-45" name="__codelineno-81-45" href="#__codelineno-81-45"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">index</span><span class="w"> </span><span class="o">&gt;=</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">size</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-81-46" name="__codelineno-81-46" href="#__codelineno-81-46"></a><span class="w"> </span><span class="fm">panic!</span><span class="p">(</span><span class="s">&quot;索引越界&quot;</span><span class="p">)</span>
<a id="__codelineno-81-47" name="__codelineno-81-47" href="#__codelineno-81-47"></a><span class="w"> </span><span class="p">};</span>
<a id="__codelineno-81-48" name="__codelineno-81-48" href="#__codelineno-81-48"></a><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">arr</span><span class="p">[</span><span class="n">index</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">num</span><span class="p">;</span>
<a id="__codelineno-81-49" name="__codelineno-81-49" href="#__codelineno-81-49"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-81-50" name="__codelineno-81-50" href="#__codelineno-81-50"></a>
<a id="__codelineno-81-51" name="__codelineno-81-51" href="#__codelineno-81-51"></a><span class="w"> </span><span class="cm">/* 在尾部添加元素 */</span>
<a id="__codelineno-81-52" name="__codelineno-81-52" href="#__codelineno-81-52"></a><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="k">fn</span> <span class="nf">add</span><span class="p">(</span><span class="o">&amp;</span><span class="k">mut</span><span class="w"> </span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">num</span>: <span class="kt">i32</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-81-53" name="__codelineno-81-53" href="#__codelineno-81-53"></a><span class="w"> </span><span class="c1">// 元素数量超出容量时,触发扩容机制</span>
<a id="__codelineno-81-54" name="__codelineno-81-54" href="#__codelineno-81-54"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">size</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">capacity</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-81-55" name="__codelineno-81-55" href="#__codelineno-81-55"></a><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">extend_capacity</span><span class="p">();</span>
<a id="__codelineno-81-56" name="__codelineno-81-56" href="#__codelineno-81-56"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-81-57" name="__codelineno-81-57" href="#__codelineno-81-57"></a><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">arr</span><span class="p">[</span><span class="bp">self</span><span class="p">.</span><span class="n">size</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">num</span><span class="p">;</span>
<a id="__codelineno-81-58" name="__codelineno-81-58" href="#__codelineno-81-58"></a><span class="w"> </span><span class="c1">// 更新元素数量</span>
<a id="__codelineno-81-59" name="__codelineno-81-59" href="#__codelineno-81-59"></a><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">size</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
<a id="__codelineno-81-60" name="__codelineno-81-60" href="#__codelineno-81-60"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-81-61" name="__codelineno-81-61" href="#__codelineno-81-61"></a>
<a id="__codelineno-81-62" name="__codelineno-81-62" href="#__codelineno-81-62"></a><span class="w"> </span><span class="cm">/* 在中间插入元素 */</span>
<a id="__codelineno-81-63" name="__codelineno-81-63" href="#__codelineno-81-63"></a><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="k">fn</span> <span class="nf">insert</span><span class="p">(</span><span class="o">&amp;</span><span class="k">mut</span><span class="w"> </span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">index</span>: <span class="kt">usize</span><span class="p">,</span><span class="w"> </span><span class="n">num</span>: <span class="kt">i32</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-81-64" name="__codelineno-81-64" href="#__codelineno-81-64"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">index</span><span class="w"> </span><span class="o">&gt;=</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">size</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-81-65" name="__codelineno-81-65" href="#__codelineno-81-65"></a><span class="w"> </span><span class="fm">panic!</span><span class="p">(</span><span class="s">&quot;索引越界&quot;</span><span class="p">)</span>
<a id="__codelineno-81-66" name="__codelineno-81-66" href="#__codelineno-81-66"></a><span class="w"> </span><span class="p">};</span>
<a id="__codelineno-81-67" name="__codelineno-81-67" href="#__codelineno-81-67"></a><span class="w"> </span><span class="c1">// 元素数量超出容量时,触发扩容机制</span>
<a id="__codelineno-81-68" name="__codelineno-81-68" href="#__codelineno-81-68"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">size</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">capacity</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-81-69" name="__codelineno-81-69" href="#__codelineno-81-69"></a><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">extend_capacity</span><span class="p">();</span>
<a id="__codelineno-81-70" name="__codelineno-81-70" href="#__codelineno-81-70"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-81-71" name="__codelineno-81-71" href="#__codelineno-81-71"></a><span class="w"> </span><span class="c1">// 将索引 index 以及之后的元素都向后移动一位</span>
<a id="__codelineno-81-72" name="__codelineno-81-72" href="#__codelineno-81-72"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">j</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="p">(</span><span class="n">index</span><span class="o">..</span><span class="bp">self</span><span class="p">.</span><span class="n">size</span><span class="p">).</span><span class="n">rev</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-81-73" name="__codelineno-81-73" href="#__codelineno-81-73"></a><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">arr</span><span class="p">[</span><span class="n">j</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">arr</span><span class="p">[</span><span class="n">j</span><span class="p">];</span>
<a id="__codelineno-81-74" name="__codelineno-81-74" href="#__codelineno-81-74"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-81-75" name="__codelineno-81-75" href="#__codelineno-81-75"></a><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">arr</span><span class="p">[</span><span class="n">index</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">num</span><span class="p">;</span>
<a id="__codelineno-81-76" name="__codelineno-81-76" href="#__codelineno-81-76"></a><span class="w"> </span><span class="c1">// 更新元素数量</span>
<a id="__codelineno-81-77" name="__codelineno-81-77" href="#__codelineno-81-77"></a><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">size</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
<a id="__codelineno-81-78" name="__codelineno-81-78" href="#__codelineno-81-78"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-81-79" name="__codelineno-81-79" href="#__codelineno-81-79"></a>
<a id="__codelineno-81-80" name="__codelineno-81-80" href="#__codelineno-81-80"></a><span class="w"> </span><span class="cm">/* 删除元素 */</span>
<a id="__codelineno-81-81" name="__codelineno-81-81" href="#__codelineno-81-81"></a><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="k">fn</span> <span class="nf">remove</span><span class="p">(</span><span class="o">&amp;</span><span class="k">mut</span><span class="w"> </span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">index</span>: <span class="kt">usize</span><span class="p">)</span><span class="w"> </span>-&gt; <span class="kt">i32</span> <span class="p">{</span>
<a id="__codelineno-81-82" name="__codelineno-81-82" href="#__codelineno-81-82"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">index</span><span class="w"> </span><span class="o">&gt;=</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">size</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-81-83" name="__codelineno-81-83" href="#__codelineno-81-83"></a><span class="w"> </span><span class="fm">panic!</span><span class="p">(</span><span class="s">&quot;索引越界&quot;</span><span class="p">)</span>
<a id="__codelineno-81-84" name="__codelineno-81-84" href="#__codelineno-81-84"></a><span class="w"> </span><span class="p">};</span>
<a id="__codelineno-81-85" name="__codelineno-81-85" href="#__codelineno-81-85"></a><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="n">num</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">arr</span><span class="p">[</span><span class="n">index</span><span class="p">];</span>
<a id="__codelineno-81-86" name="__codelineno-81-86" href="#__codelineno-81-86"></a><span class="w"> </span><span class="c1">// 将将索引 index 之后的元素都向前移动一位</span>
<a id="__codelineno-81-87" name="__codelineno-81-87" href="#__codelineno-81-87"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">j</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="p">(</span><span class="n">index</span><span class="o">..</span><span class="bp">self</span><span class="p">.</span><span class="n">size</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-81-88" name="__codelineno-81-88" href="#__codelineno-81-88"></a><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">arr</span><span class="p">[</span><span class="n">j</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">arr</span><span class="p">[</span><span class="n">j</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">];</span>
<a id="__codelineno-81-89" name="__codelineno-81-89" href="#__codelineno-81-89"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-81-90" name="__codelineno-81-90" href="#__codelineno-81-90"></a><span class="w"> </span><span class="c1">// 更新元素数量</span>
<a id="__codelineno-81-91" name="__codelineno-81-91" href="#__codelineno-81-91"></a><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">size</span><span class="w"> </span><span class="o">-=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
<a id="__codelineno-81-92" name="__codelineno-81-92" href="#__codelineno-81-92"></a><span class="w"> </span><span class="c1">// 返回被删除的元素</span>
<a id="__codelineno-81-93" name="__codelineno-81-93" href="#__codelineno-81-93"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">num</span><span class="p">;</span>
<a id="__codelineno-81-94" name="__codelineno-81-94" href="#__codelineno-81-94"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-81-95" name="__codelineno-81-95" href="#__codelineno-81-95"></a>
<a id="__codelineno-81-96" name="__codelineno-81-96" href="#__codelineno-81-96"></a><span class="w"> </span><span class="cm">/* 列表扩容 */</span>
<a id="__codelineno-81-97" name="__codelineno-81-97" href="#__codelineno-81-97"></a><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="k">fn</span> <span class="nf">extend_capacity</span><span class="p">(</span><span class="o">&amp;</span><span class="k">mut</span><span class="w"> </span><span class="bp">self</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-81-98" name="__codelineno-81-98" href="#__codelineno-81-98"></a><span class="w"> </span><span class="c1">// 新建一个长度为原数组 extend_ratio 倍的新数组,并将原数组复制到新数组</span>
<a id="__codelineno-81-99" name="__codelineno-81-99" href="#__codelineno-81-99"></a><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="n">new_capacity</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">capacity</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">extend_ratio</span><span class="p">;</span>
<a id="__codelineno-81-100" name="__codelineno-81-100" href="#__codelineno-81-100"></a><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">arr</span><span class="p">.</span><span class="n">resize</span><span class="p">(</span><span class="n">new_capacity</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">);</span>
<a id="__codelineno-81-101" name="__codelineno-81-101" href="#__codelineno-81-101"></a><span class="w"> </span><span class="c1">// 更新列表容量</span>
<a id="__codelineno-81-102" name="__codelineno-81-102" href="#__codelineno-81-102"></a><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">capacity</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">new_capacity</span><span class="p">;</span>
<a id="__codelineno-81-103" name="__codelineno-81-103" href="#__codelineno-81-103"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-81-104" name="__codelineno-81-104" href="#__codelineno-81-104"></a>
<a id="__codelineno-81-105" name="__codelineno-81-105" href="#__codelineno-81-105"></a><span class="w"> </span><span class="cm">/* 将列表转换为数组 */</span>
<a id="__codelineno-81-106" name="__codelineno-81-106" href="#__codelineno-81-106"></a><span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="k">fn</span> <span class="nf">to_array</span><span class="p">(</span><span class="o">&amp;</span><span class="k">mut</span><span class="w"> </span><span class="bp">self</span><span class="p">)</span><span class="w"> </span>-&gt; <span class="nb">Vec</span><span class="o">&lt;</span><span class="kt">i32</span><span class="o">&gt;</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-81-107" name="__codelineno-81-107" href="#__codelineno-81-107"></a><span class="w"> </span><span class="c1">// 仅转换有效长度范围内的列表元素</span>
<a id="__codelineno-81-108" name="__codelineno-81-108" href="#__codelineno-81-108"></a><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">arr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">Vec</span>::<span class="n">new</span><span class="p">();</span>
<a id="__codelineno-81-109" name="__codelineno-81-109" href="#__codelineno-81-109"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="mi">0</span><span class="o">..</span><span class="bp">self</span><span class="p">.</span><span class="n">size</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-81-110" name="__codelineno-81-110" href="#__codelineno-81-110"></a><span class="w"> </span><span class="n">arr</span><span class="p">.</span><span class="n">push</span><span class="p">(</span><span class="bp">self</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="n">i</span><span class="p">));</span>
<a id="__codelineno-81-111" name="__codelineno-81-111" href="#__codelineno-81-111"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-81-112" name="__codelineno-81-112" href="#__codelineno-81-112"></a><span class="w"> </span><span class="n">arr</span>
<a id="__codelineno-81-113" name="__codelineno-81-113" href="#__codelineno-81-113"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-81-114" name="__codelineno-81-114" href="#__codelineno-81-114"></a><span class="p">}</span>
</code></pre></div>
</div>
<div class="tabbed-block">