mirror of
https://github.com/krahets/hello-algo.git
synced 2026-08-12 11:50:58 +00:00
deploy
This commit is contained in:
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -2434,7 +2434,7 @@
|
||||
<li><strong>Size Recording</strong>: Declare a variable <code>size</code> to record the current number of elements in the list, updating in real-time with element insertion and deletion. With this variable, we can locate the end of the list and determine whether expansion is needed.</li>
|
||||
<li><strong>Expansion Mechanism</strong>: If the list reaches full capacity upon an element insertion, an expansion process is required. This involves creating a larger array based on the expansion factor, and then transferring all elements from the current array to the new one. In this example, we stipulate that the array size should double with each expansion.</li>
|
||||
</ul>
|
||||
<div class="tabbed-set tabbed-alternate" data-tabs="7:13"><input checked="checked" id="__tabbed_7_1" name="__tabbed_7" type="radio" /><input id="__tabbed_7_2" name="__tabbed_7" type="radio" /><input id="__tabbed_7_3" name="__tabbed_7" type="radio" /><input id="__tabbed_7_4" name="__tabbed_7" type="radio" /><input id="__tabbed_7_5" name="__tabbed_7" type="radio" /><input id="__tabbed_7_6" name="__tabbed_7" type="radio" /><input id="__tabbed_7_7" name="__tabbed_7" type="radio" /><input id="__tabbed_7_8" name="__tabbed_7" type="radio" /><input id="__tabbed_7_9" name="__tabbed_7" type="radio" /><input id="__tabbed_7_10" name="__tabbed_7" type="radio" /><input id="__tabbed_7_11" name="__tabbed_7" type="radio" /><input id="__tabbed_7_12" name="__tabbed_7" type="radio" /><input id="__tabbed_7_13" name="__tabbed_7" type="radio" /><div class="tabbed-labels"><label for="__tabbed_7_1">Python</label><label for="__tabbed_7_2">C++</label><label for="__tabbed_7_3">Java</label><label for="__tabbed_7_4">C#</label><label for="__tabbed_7_5">Go</label><label for="__tabbed_7_6">Swift</label><label for="__tabbed_7_7">JS</label><label for="__tabbed_7_8">TS</label><label for="__tabbed_7_9">Dart</label><label for="__tabbed_7_10">Rust</label><label for="__tabbed_7_11">C</label><label for="__tabbed_7_12">Kotlin</label><label for="__tabbed_7_13">Zig</label></div>
|
||||
<div class="tabbed-set tabbed-alternate" data-tabs="7:14"><input checked="checked" id="__tabbed_7_1" name="__tabbed_7" type="radio" /><input id="__tabbed_7_2" name="__tabbed_7" type="radio" /><input id="__tabbed_7_3" name="__tabbed_7" type="radio" /><input id="__tabbed_7_4" name="__tabbed_7" type="radio" /><input id="__tabbed_7_5" name="__tabbed_7" type="radio" /><input id="__tabbed_7_6" name="__tabbed_7" type="radio" /><input id="__tabbed_7_7" name="__tabbed_7" type="radio" /><input id="__tabbed_7_8" name="__tabbed_7" type="radio" /><input id="__tabbed_7_9" name="__tabbed_7" type="radio" /><input id="__tabbed_7_10" name="__tabbed_7" type="radio" /><input id="__tabbed_7_11" name="__tabbed_7" type="radio" /><input id="__tabbed_7_12" name="__tabbed_7" type="radio" /><input id="__tabbed_7_13" name="__tabbed_7" type="radio" /><input id="__tabbed_7_14" name="__tabbed_7" type="radio" /><div class="tabbed-labels"><label for="__tabbed_7_1">Python</label><label for="__tabbed_7_2">C++</label><label for="__tabbed_7_3">Java</label><label for="__tabbed_7_4">C#</label><label for="__tabbed_7_5">Go</label><label for="__tabbed_7_6">Swift</label><label for="__tabbed_7_7">JS</label><label for="__tabbed_7_8">TS</label><label for="__tabbed_7_9">Dart</label><label for="__tabbed_7_10">Rust</label><label for="__tabbed_7_11">C</label><label for="__tabbed_7_12">Kotlin</label><label for="__tabbed_7_13">Ruby</label><label for="__tabbed_7_14">Zig</label></div>
|
||||
<div class="tabbed-content">
|
||||
<div class="tabbed-block">
|
||||
<div class="highlight"><span class="filename">my_list.py</span><pre><span></span><code><a id="__codelineno-78-1" name="__codelineno-78-1" href="#__codelineno-78-1"></a><span class="k">class</span> <span class="nc">MyList</span><span class="p">:</span>
|
||||
@@ -3649,122 +3649,214 @@
|
||||
</code></pre></div>
|
||||
</div>
|
||||
<div class="tabbed-block">
|
||||
<div class="highlight"><span class="filename">my_list.zig</span><pre><span></span><code><a id="__codelineno-90-1" name="__codelineno-90-1" href="#__codelineno-90-1"></a><span class="c1">// 列表类</span>
|
||||
<a id="__codelineno-90-2" name="__codelineno-90-2" href="#__codelineno-90-2"></a><span class="k">fn</span><span class="w"> </span><span class="n">MyList</span><span class="p">(</span><span class="kr">comptime</span><span class="w"> </span><span class="n">T</span><span class="o">:</span><span class="w"> </span><span class="kt">type</span><span class="p">)</span><span class="w"> </span><span class="kt">type</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-90-3" name="__codelineno-90-3" href="#__codelineno-90-3"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-90-4" name="__codelineno-90-4" href="#__codelineno-90-4"></a><span class="w"> </span><span class="kr">const</span><span class="w"> </span><span class="n">Self</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">@This</span><span class="p">();</span>
|
||||
<div class="highlight"><span class="filename">my_list.rb</span><pre><span></span><code><a id="__codelineno-90-1" name="__codelineno-90-1" href="#__codelineno-90-1"></a><span class="c1">### 列表类 ###</span>
|
||||
<a id="__codelineno-90-2" name="__codelineno-90-2" href="#__codelineno-90-2"></a><span class="k">class</span><span class="w"> </span><span class="nc">MyList</span>
|
||||
<a id="__codelineno-90-3" name="__codelineno-90-3" href="#__codelineno-90-3"></a><span class="w"> </span><span class="kp">attr_reader</span><span class="w"> </span><span class="ss">:size</span><span class="w"> </span><span class="c1"># 获取列表长度(当前元素数量)</span>
|
||||
<a id="__codelineno-90-4" name="__codelineno-90-4" href="#__codelineno-90-4"></a><span class="w"> </span><span class="kp">attr_reader</span><span class="w"> </span><span class="ss">:capacity</span><span class="w"> </span><span class="c1"># 获取列表容量</span>
|
||||
<a id="__codelineno-90-5" name="__codelineno-90-5" href="#__codelineno-90-5"></a>
|
||||
<a id="__codelineno-90-6" name="__codelineno-90-6" href="#__codelineno-90-6"></a><span class="w"> </span><span class="n">arr</span><span class="o">:</span><span class="w"> </span><span class="p">[]</span><span class="n">T</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">undefined</span><span class="p">,</span><span class="w"> </span><span class="c1">// 数组(存储列表元素)</span>
|
||||
<a id="__codelineno-90-7" name="__codelineno-90-7" href="#__codelineno-90-7"></a><span class="w"> </span><span class="n">arrCapacity</span><span class="o">:</span><span class="w"> </span><span class="kt">usize</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">10</span><span class="p">,</span><span class="w"> </span><span class="c1">// 列表容量</span>
|
||||
<a id="__codelineno-90-8" name="__codelineno-90-8" href="#__codelineno-90-8"></a><span class="w"> </span><span class="n">numSize</span><span class="o">:</span><span class="w"> </span><span class="kt">usize</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="c1">// 列表长度(当前元素数量)</span>
|
||||
<a id="__codelineno-90-9" name="__codelineno-90-9" href="#__codelineno-90-9"></a><span class="w"> </span><span class="n">extendRatio</span><span class="o">:</span><span class="w"> </span><span class="kt">usize</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="c1">// 每次列表扩容的倍数</span>
|
||||
<a id="__codelineno-90-10" name="__codelineno-90-10" href="#__codelineno-90-10"></a><span class="w"> </span><span class="n">mem_arena</span><span class="o">:</span><span class="w"> </span><span class="o">?</span><span class="n">std</span><span class="p">.</span><span class="n">heap</span><span class="p">.</span><span class="n">ArenaAllocator</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span>
|
||||
<a id="__codelineno-90-11" name="__codelineno-90-11" href="#__codelineno-90-11"></a><span class="w"> </span><span class="n">mem_allocator</span><span class="o">:</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">mem</span><span class="p">.</span><span class="n">Allocator</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">undefined</span><span class="p">,</span><span class="w"> </span><span class="c1">// 内存分配器</span>
|
||||
<a id="__codelineno-90-12" name="__codelineno-90-12" href="#__codelineno-90-12"></a>
|
||||
<a id="__codelineno-90-13" name="__codelineno-90-13" href="#__codelineno-90-13"></a><span class="w"> </span><span class="c1">// 构造函数(分配内存+初始化列表)</span>
|
||||
<a id="__codelineno-90-14" name="__codelineno-90-14" href="#__codelineno-90-14"></a><span class="w"> </span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">init</span><span class="p">(</span><span class="n">self</span><span class="o">:</span><span class="w"> </span><span class="o">*</span><span class="n">Self</span><span class="p">,</span><span class="w"> </span><span class="n">allocator</span><span class="o">:</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">mem</span><span class="p">.</span><span class="n">Allocator</span><span class="p">)</span><span class="w"> </span><span class="o">!</span><span class="kt">void</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-90-15" name="__codelineno-90-15" href="#__codelineno-90-15"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">mem_arena</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-90-16" name="__codelineno-90-16" href="#__codelineno-90-16"></a><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">mem_arena</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">heap</span><span class="p">.</span><span class="n">ArenaAllocator</span><span class="p">.</span><span class="n">init</span><span class="p">(</span><span class="n">allocator</span><span class="p">);</span>
|
||||
<a id="__codelineno-90-17" name="__codelineno-90-17" href="#__codelineno-90-17"></a><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">mem_allocator</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">mem_arena</span><span class="p">.</span><span class="o">?</span><span class="p">.</span><span class="n">allocator</span><span class="p">();</span>
|
||||
<a id="__codelineno-90-18" name="__codelineno-90-18" href="#__codelineno-90-18"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-90-19" name="__codelineno-90-19" href="#__codelineno-90-19"></a><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">arr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">mem_allocator</span><span class="p">.</span><span class="n">alloc</span><span class="p">(</span><span class="n">T</span><span class="p">,</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">arrCapacity</span><span class="p">);</span>
|
||||
<a id="__codelineno-90-20" name="__codelineno-90-20" href="#__codelineno-90-20"></a><span class="w"> </span><span class="nb">@memset</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">arr</span><span class="p">,</span><span class="w"> </span><span class="nb">@as</span><span class="p">(</span><span class="n">T</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">));</span>
|
||||
<a id="__codelineno-90-21" name="__codelineno-90-21" href="#__codelineno-90-21"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-90-22" name="__codelineno-90-22" href="#__codelineno-90-22"></a>
|
||||
<a id="__codelineno-90-23" name="__codelineno-90-23" href="#__codelineno-90-23"></a><span class="w"> </span><span class="c1">// 析构函数(释放内存)</span>
|
||||
<a id="__codelineno-90-24" name="__codelineno-90-24" href="#__codelineno-90-24"></a><span class="w"> </span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">deinit</span><span class="p">(</span><span class="n">self</span><span class="o">:</span><span class="w"> </span><span class="o">*</span><span class="n">Self</span><span class="p">)</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-90-25" name="__codelineno-90-25" href="#__codelineno-90-25"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">mem_arena</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span><span class="w"> </span><span class="k">return</span><span class="p">;</span>
|
||||
<a id="__codelineno-90-26" name="__codelineno-90-26" href="#__codelineno-90-26"></a><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">mem_arena</span><span class="p">.</span><span class="o">?</span><span class="p">.</span><span class="n">deinit</span><span class="p">();</span>
|
||||
<a id="__codelineno-90-27" name="__codelineno-90-27" href="#__codelineno-90-27"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-90-28" name="__codelineno-90-28" href="#__codelineno-90-28"></a>
|
||||
<a id="__codelineno-90-29" name="__codelineno-90-29" href="#__codelineno-90-29"></a><span class="w"> </span><span class="c1">// 获取列表长度(当前元素数量)</span>
|
||||
<a id="__codelineno-90-30" name="__codelineno-90-30" href="#__codelineno-90-30"></a><span class="w"> </span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">size</span><span class="p">(</span><span class="n">self</span><span class="o">:</span><span class="w"> </span><span class="o">*</span><span class="n">Self</span><span class="p">)</span><span class="w"> </span><span class="kt">usize</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-90-31" name="__codelineno-90-31" href="#__codelineno-90-31"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">numSize</span><span class="p">;</span>
|
||||
<a id="__codelineno-90-32" name="__codelineno-90-32" href="#__codelineno-90-32"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-90-33" name="__codelineno-90-33" href="#__codelineno-90-33"></a>
|
||||
<a id="__codelineno-90-34" name="__codelineno-90-34" href="#__codelineno-90-34"></a><span class="w"> </span><span class="c1">// 获取列表容量</span>
|
||||
<a id="__codelineno-90-35" name="__codelineno-90-35" href="#__codelineno-90-35"></a><span class="w"> </span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">capacity</span><span class="p">(</span><span class="n">self</span><span class="o">:</span><span class="w"> </span><span class="o">*</span><span class="n">Self</span><span class="p">)</span><span class="w"> </span><span class="kt">usize</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-90-36" name="__codelineno-90-36" href="#__codelineno-90-36"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">arrCapacity</span><span class="p">;</span>
|
||||
<a id="__codelineno-90-37" name="__codelineno-90-37" href="#__codelineno-90-37"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-90-38" name="__codelineno-90-38" href="#__codelineno-90-38"></a>
|
||||
<a id="__codelineno-90-39" name="__codelineno-90-39" href="#__codelineno-90-39"></a><span class="w"> </span><span class="c1">// 访问元素</span>
|
||||
<a id="__codelineno-90-40" name="__codelineno-90-40" href="#__codelineno-90-40"></a><span class="w"> </span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">get</span><span class="p">(</span><span class="n">self</span><span class="o">:</span><span class="w"> </span><span class="o">*</span><span class="n">Self</span><span class="p">,</span><span class="w"> </span><span class="n">index</span><span class="o">:</span><span class="w"> </span><span class="kt">usize</span><span class="p">)</span><span class="w"> </span><span class="n">T</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-90-41" name="__codelineno-90-41" href="#__codelineno-90-41"></a><span class="w"> </span><span class="c1">// 索引如果越界,则抛出异常,下同</span>
|
||||
<a id="__codelineno-90-42" name="__codelineno-90-42" href="#__codelineno-90-42"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">index</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="k">or</span><span class="w"> </span><span class="n">index</span><span class="w"> </span><span class="o">>=</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">size</span><span class="p">())</span><span class="w"> </span><span class="nb">@panic</span><span class="p">(</span><span class="s">"索引越界"</span><span class="p">);</span>
|
||||
<a id="__codelineno-90-43" name="__codelineno-90-43" href="#__codelineno-90-43"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">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-90-44" name="__codelineno-90-44" href="#__codelineno-90-44"></a><span class="w"> </span><span class="p">}</span><span class="w"> </span>
|
||||
<a id="__codelineno-90-45" name="__codelineno-90-45" href="#__codelineno-90-45"></a>
|
||||
<a id="__codelineno-90-46" name="__codelineno-90-46" href="#__codelineno-90-46"></a><span class="w"> </span><span class="c1">// 更新元素</span>
|
||||
<a id="__codelineno-90-47" name="__codelineno-90-47" href="#__codelineno-90-47"></a><span class="w"> </span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">set</span><span class="p">(</span><span class="n">self</span><span class="o">:</span><span class="w"> </span><span class="o">*</span><span class="n">Self</span><span class="p">,</span><span class="w"> </span><span class="n">index</span><span class="o">:</span><span class="w"> </span><span class="kt">usize</span><span class="p">,</span><span class="w"> </span><span class="n">num</span><span class="o">:</span><span class="w"> </span><span class="n">T</span><span class="p">)</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-90-48" name="__codelineno-90-48" href="#__codelineno-90-48"></a><span class="w"> </span><span class="c1">// 索引如果越界,则抛出异常,下同</span>
|
||||
<a id="__codelineno-90-49" name="__codelineno-90-49" href="#__codelineno-90-49"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">index</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="k">or</span><span class="w"> </span><span class="n">index</span><span class="w"> </span><span class="o">>=</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">size</span><span class="p">())</span><span class="w"> </span><span class="nb">@panic</span><span class="p">(</span><span class="s">"索引越界"</span><span class="p">);</span>
|
||||
<a id="__codelineno-90-50" name="__codelineno-90-50" href="#__codelineno-90-50"></a><span class="w"> </span><span class="n">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-90-51" name="__codelineno-90-51" href="#__codelineno-90-51"></a><span class="w"> </span><span class="p">}</span><span class="w"> </span>
|
||||
<a id="__codelineno-90-52" name="__codelineno-90-52" href="#__codelineno-90-52"></a>
|
||||
<a id="__codelineno-90-53" name="__codelineno-90-53" href="#__codelineno-90-53"></a><span class="w"> </span><span class="c1">// 在尾部添加元素</span>
|
||||
<a id="__codelineno-90-54" name="__codelineno-90-54" href="#__codelineno-90-54"></a><span class="w"> </span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">add</span><span class="p">(</span><span class="n">self</span><span class="o">:</span><span class="w"> </span><span class="o">*</span><span class="n">Self</span><span class="p">,</span><span class="w"> </span><span class="n">num</span><span class="o">:</span><span class="w"> </span><span class="n">T</span><span class="p">)</span><span class="w"> </span><span class="o">!</span><span class="kt">void</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-90-55" name="__codelineno-90-55" href="#__codelineno-90-55"></a><span class="w"> </span><span class="c1">// 元素数量超出容量时,触发扩容机制</span>
|
||||
<a id="__codelineno-90-56" name="__codelineno-90-56" href="#__codelineno-90-56"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">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">self</span><span class="p">.</span><span class="n">capacity</span><span class="p">())</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">extendCapacity</span><span class="p">();</span>
|
||||
<a id="__codelineno-90-57" name="__codelineno-90-57" href="#__codelineno-90-57"></a><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">arr</span><span class="p">[</span><span class="n">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-90-58" name="__codelineno-90-58" href="#__codelineno-90-58"></a><span class="w"> </span><span class="c1">// 更新元素数量</span>
|
||||
<a id="__codelineno-90-59" name="__codelineno-90-59" href="#__codelineno-90-59"></a><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">numSize</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-90-60" name="__codelineno-90-60" href="#__codelineno-90-60"></a><span class="w"> </span><span class="p">}</span><span class="w"> </span>
|
||||
<a id="__codelineno-90-61" name="__codelineno-90-61" href="#__codelineno-90-61"></a>
|
||||
<a id="__codelineno-90-62" name="__codelineno-90-62" href="#__codelineno-90-62"></a><span class="w"> </span><span class="c1">// 在中间插入元素</span>
|
||||
<a id="__codelineno-90-63" name="__codelineno-90-63" href="#__codelineno-90-63"></a><span class="w"> </span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">insert</span><span class="p">(</span><span class="n">self</span><span class="o">:</span><span class="w"> </span><span class="o">*</span><span class="n">Self</span><span class="p">,</span><span class="w"> </span><span class="n">index</span><span class="o">:</span><span class="w"> </span><span class="kt">usize</span><span class="p">,</span><span class="w"> </span><span class="n">num</span><span class="o">:</span><span class="w"> </span><span class="n">T</span><span class="p">)</span><span class="w"> </span><span class="o">!</span><span class="kt">void</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-90-64" name="__codelineno-90-64" href="#__codelineno-90-64"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">index</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="k">or</span><span class="w"> </span><span class="n">index</span><span class="w"> </span><span class="o">>=</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">size</span><span class="p">())</span><span class="w"> </span><span class="nb">@panic</span><span class="p">(</span><span class="s">"索引越界"</span><span class="p">);</span>
|
||||
<a id="__codelineno-90-65" name="__codelineno-90-65" href="#__codelineno-90-65"></a><span class="w"> </span><span class="c1">// 元素数量超出容量时,触发扩容机制</span>
|
||||
<a id="__codelineno-90-66" name="__codelineno-90-66" href="#__codelineno-90-66"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">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">self</span><span class="p">.</span><span class="n">capacity</span><span class="p">())</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">extendCapacity</span><span class="p">();</span>
|
||||
<a id="__codelineno-90-67" name="__codelineno-90-67" href="#__codelineno-90-67"></a><span class="w"> </span><span class="c1">// 将索引 index 以及之后的元素都向后移动一位</span>
|
||||
<a id="__codelineno-90-68" name="__codelineno-90-68" href="#__codelineno-90-68"></a><span class="w"> </span><span class="kr">var</span><span class="w"> </span><span class="n">j</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">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="mi">1</span><span class="p">;</span>
|
||||
<a id="__codelineno-90-69" name="__codelineno-90-69" href="#__codelineno-90-69"></a><span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="n">j</span><span class="w"> </span><span class="o">>=</span><span class="w"> </span><span class="n">index</span><span class="p">)</span><span class="w"> </span><span class="o">:</span><span class="w"> </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="p">{</span>
|
||||
<a id="__codelineno-90-70" name="__codelineno-90-70" href="#__codelineno-90-70"></a><span class="w"> </span><span class="n">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="n">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-90-71" name="__codelineno-90-71" href="#__codelineno-90-71"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-90-72" name="__codelineno-90-72" href="#__codelineno-90-72"></a><span class="w"> </span><span class="n">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-90-73" name="__codelineno-90-73" href="#__codelineno-90-73"></a><span class="w"> </span><span class="c1">// 更新元素数量</span>
|
||||
<a id="__codelineno-90-74" name="__codelineno-90-74" href="#__codelineno-90-74"></a><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">numSize</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-90-75" name="__codelineno-90-75" href="#__codelineno-90-75"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-90-76" name="__codelineno-90-76" href="#__codelineno-90-76"></a>
|
||||
<a id="__codelineno-90-77" name="__codelineno-90-77" href="#__codelineno-90-77"></a><span class="w"> </span><span class="c1">// 删除元素</span>
|
||||
<a id="__codelineno-90-78" name="__codelineno-90-78" href="#__codelineno-90-78"></a><span class="w"> </span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">remove</span><span class="p">(</span><span class="n">self</span><span class="o">:</span><span class="w"> </span><span class="o">*</span><span class="n">Self</span><span class="p">,</span><span class="w"> </span><span class="n">index</span><span class="o">:</span><span class="w"> </span><span class="kt">usize</span><span class="p">)</span><span class="w"> </span><span class="n">T</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-90-79" name="__codelineno-90-79" href="#__codelineno-90-79"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">index</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="k">or</span><span class="w"> </span><span class="n">index</span><span class="w"> </span><span class="o">>=</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">size</span><span class="p">())</span><span class="w"> </span><span class="nb">@panic</span><span class="p">(</span><span class="s">"索引越界"</span><span class="p">);</span>
|
||||
<a id="__codelineno-90-80" name="__codelineno-90-80" href="#__codelineno-90-80"></a><span class="w"> </span><span class="kr">var</span><span class="w"> </span><span class="n">num</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">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-90-81" name="__codelineno-90-81" href="#__codelineno-90-81"></a><span class="w"> </span><span class="c1">// 将索引 index 之后的元素都向前移动一位</span>
|
||||
<a id="__codelineno-90-82" name="__codelineno-90-82" href="#__codelineno-90-82"></a><span class="w"> </span><span class="kr">var</span><span class="w"> </span><span class="n">j</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">index</span><span class="p">;</span>
|
||||
<a id="__codelineno-90-83" name="__codelineno-90-83" href="#__codelineno-90-83"></a><span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="n">j</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">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="mi">1</span><span class="p">)</span><span class="w"> </span><span class="o">:</span><span class="w"> </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="p">{</span>
|
||||
<a id="__codelineno-90-84" name="__codelineno-90-84" href="#__codelineno-90-84"></a><span class="w"> </span><span class="n">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="n">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-90-85" name="__codelineno-90-85" href="#__codelineno-90-85"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-90-86" name="__codelineno-90-86" href="#__codelineno-90-86"></a><span class="w"> </span><span class="c1">// 更新元素数量</span>
|
||||
<a id="__codelineno-90-87" name="__codelineno-90-87" href="#__codelineno-90-87"></a><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">numSize</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-90-88" name="__codelineno-90-88" href="#__codelineno-90-88"></a><span class="w"> </span><span class="c1">// 返回被删除的元素</span>
|
||||
<a id="__codelineno-90-89" name="__codelineno-90-89" href="#__codelineno-90-89"></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-90-90" name="__codelineno-90-90" href="#__codelineno-90-90"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-90-91" name="__codelineno-90-91" href="#__codelineno-90-91"></a>
|
||||
<a id="__codelineno-90-92" name="__codelineno-90-92" href="#__codelineno-90-92"></a><span class="w"> </span><span class="c1">// 列表扩容</span>
|
||||
<a id="__codelineno-90-93" name="__codelineno-90-93" href="#__codelineno-90-93"></a><span class="w"> </span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">extendCapacity</span><span class="p">(</span><span class="n">self</span><span class="o">:</span><span class="w"> </span><span class="o">*</span><span class="n">Self</span><span class="p">)</span><span class="w"> </span><span class="o">!</span><span class="kt">void</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-90-94" name="__codelineno-90-94" href="#__codelineno-90-94"></a><span class="w"> </span><span class="c1">// 新建一个长度为 size * extendRatio 的数组,并将原数组复制到新数组</span>
|
||||
<a id="__codelineno-90-95" name="__codelineno-90-95" href="#__codelineno-90-95"></a><span class="w"> </span><span class="kr">var</span><span class="w"> </span><span class="n">newCapacity</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">capacity</span><span class="p">()</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">extendRatio</span><span class="p">;</span>
|
||||
<a id="__codelineno-90-96" name="__codelineno-90-96" href="#__codelineno-90-96"></a><span class="w"> </span><span class="kr">var</span><span class="w"> </span><span class="n">extend</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">mem_allocator</span><span class="p">.</span><span class="n">alloc</span><span class="p">(</span><span class="n">T</span><span class="p">,</span><span class="w"> </span><span class="n">newCapacity</span><span class="p">);</span>
|
||||
<a id="__codelineno-90-97" name="__codelineno-90-97" href="#__codelineno-90-97"></a><span class="w"> </span><span class="nb">@memset</span><span class="p">(</span><span class="n">extend</span><span class="p">,</span><span class="w"> </span><span class="nb">@as</span><span class="p">(</span><span class="n">T</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">));</span>
|
||||
<a id="__codelineno-90-98" name="__codelineno-90-98" href="#__codelineno-90-98"></a><span class="w"> </span><span class="c1">// 将原数组中的所有元素复制到新数组</span>
|
||||
<a id="__codelineno-90-99" name="__codelineno-90-99" href="#__codelineno-90-99"></a><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">mem</span><span class="p">.</span><span class="n">copy</span><span class="p">(</span><span class="n">T</span><span class="p">,</span><span class="w"> </span><span class="n">extend</span><span class="p">,</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">arr</span><span class="p">);</span>
|
||||
<a id="__codelineno-90-100" name="__codelineno-90-100" href="#__codelineno-90-100"></a><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">arr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">extend</span><span class="p">;</span>
|
||||
<a id="__codelineno-90-101" name="__codelineno-90-101" href="#__codelineno-90-101"></a><span class="w"> </span><span class="c1">// 更新列表容量</span>
|
||||
<a id="__codelineno-90-102" name="__codelineno-90-102" href="#__codelineno-90-102"></a><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">arrCapacity</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">newCapacity</span><span class="p">;</span>
|
||||
<a id="__codelineno-90-103" name="__codelineno-90-103" href="#__codelineno-90-103"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-90-104" name="__codelineno-90-104" href="#__codelineno-90-104"></a>
|
||||
<a id="__codelineno-90-105" name="__codelineno-90-105" href="#__codelineno-90-105"></a><span class="w"> </span><span class="c1">// 将列表转换为数组</span>
|
||||
<a id="__codelineno-90-106" name="__codelineno-90-106" href="#__codelineno-90-106"></a><span class="w"> </span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">toArray</span><span class="p">(</span><span class="n">self</span><span class="o">:</span><span class="w"> </span><span class="o">*</span><span class="n">Self</span><span class="p">)</span><span class="w"> </span><span class="o">!</span><span class="p">[]</span><span class="n">T</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-90-107" name="__codelineno-90-107" href="#__codelineno-90-107"></a><span class="w"> </span><span class="c1">// 仅转换有效长度范围内的列表元素</span>
|
||||
<a id="__codelineno-90-108" name="__codelineno-90-108" href="#__codelineno-90-108"></a><span class="w"> </span><span class="kr">var</span><span class="w"> </span><span class="n">arr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">mem_allocator</span><span class="p">.</span><span class="n">alloc</span><span class="p">(</span><span class="n">T</span><span class="p">,</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">size</span><span class="p">());</span>
|
||||
<a id="__codelineno-90-109" name="__codelineno-90-109" href="#__codelineno-90-109"></a><span class="w"> </span><span class="nb">@memset</span><span class="p">(</span><span class="n">arr</span><span class="p">,</span><span class="w"> </span><span class="nb">@as</span><span class="p">(</span><span class="n">T</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">));</span>
|
||||
<a id="__codelineno-90-110" name="__codelineno-90-110" href="#__codelineno-90-110"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">arr</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">..)</span><span class="w"> </span><span class="o">|*</span><span class="n">num</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="o">|</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-90-111" name="__codelineno-90-111" href="#__codelineno-90-111"></a><span class="w"> </span><span class="n">num</span><span class="p">.</span><span class="o">*</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">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-90-112" name="__codelineno-90-112" href="#__codelineno-90-112"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-90-113" name="__codelineno-90-113" href="#__codelineno-90-113"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">arr</span><span class="p">;</span>
|
||||
<a id="__codelineno-90-114" name="__codelineno-90-114" href="#__codelineno-90-114"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-90-115" name="__codelineno-90-115" href="#__codelineno-90-115"></a><span class="w"> </span><span class="p">};</span>
|
||||
<a id="__codelineno-90-116" name="__codelineno-90-116" href="#__codelineno-90-116"></a><span class="p">}</span>
|
||||
<a id="__codelineno-90-6" name="__codelineno-90-6" href="#__codelineno-90-6"></a><span class="w"> </span><span class="c1">### 构造方法 ###</span>
|
||||
<a id="__codelineno-90-7" name="__codelineno-90-7" href="#__codelineno-90-7"></a><span class="w"> </span><span class="k">def</span><span class="w"> </span><span class="nf">initialize</span>
|
||||
<a id="__codelineno-90-8" name="__codelineno-90-8" href="#__codelineno-90-8"></a><span class="w"> </span><span class="vi">@capacity</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">10</span>
|
||||
<a id="__codelineno-90-9" name="__codelineno-90-9" href="#__codelineno-90-9"></a><span class="w"> </span><span class="vi">@size</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span>
|
||||
<a id="__codelineno-90-10" name="__codelineno-90-10" href="#__codelineno-90-10"></a><span class="w"> </span><span class="vi">@extend_ratio</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span>
|
||||
<a id="__codelineno-90-11" name="__codelineno-90-11" href="#__codelineno-90-11"></a><span class="w"> </span><span class="vi">@arr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">Array</span><span class="o">.</span><span class="n">new</span><span class="w"> </span><span class="n">capacity</span>
|
||||
<a id="__codelineno-90-12" name="__codelineno-90-12" href="#__codelineno-90-12"></a><span class="w"> </span><span class="k">end</span>
|
||||
<a id="__codelineno-90-13" name="__codelineno-90-13" href="#__codelineno-90-13"></a>
|
||||
<a id="__codelineno-90-14" name="__codelineno-90-14" href="#__codelineno-90-14"></a><span class="w"> </span><span class="c1">### 访问元素 ###</span>
|
||||
<a id="__codelineno-90-15" name="__codelineno-90-15" href="#__codelineno-90-15"></a><span class="w"> </span><span class="k">def</span><span class="w"> </span><span class="nf">get</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
|
||||
<a id="__codelineno-90-16" name="__codelineno-90-16" href="#__codelineno-90-16"></a><span class="w"> </span><span class="c1"># 索引如果越界,则抛出异常,下同</span>
|
||||
<a id="__codelineno-90-17" name="__codelineno-90-17" href="#__codelineno-90-17"></a><span class="w"> </span><span class="k">raise</span><span class="w"> </span><span class="no">IndexError</span><span class="p">,</span><span class="w"> </span><span class="s2">"索引越界"</span><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"><</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">index</span><span class="w"> </span><span class="o">>=</span><span class="w"> </span><span class="n">size</span>
|
||||
<a id="__codelineno-90-18" name="__codelineno-90-18" href="#__codelineno-90-18"></a><span class="w"> </span><span class="vi">@arr</span><span class="o">[</span><span class="n">index</span><span class="o">]</span>
|
||||
<a id="__codelineno-90-19" name="__codelineno-90-19" href="#__codelineno-90-19"></a><span class="w"> </span><span class="k">end</span>
|
||||
<a id="__codelineno-90-20" name="__codelineno-90-20" href="#__codelineno-90-20"></a>
|
||||
<a id="__codelineno-90-21" name="__codelineno-90-21" href="#__codelineno-90-21"></a><span class="w"> </span><span class="c1">### 访问元素 ###</span>
|
||||
<a id="__codelineno-90-22" name="__codelineno-90-22" href="#__codelineno-90-22"></a><span class="w"> </span><span class="k">def</span><span class="w"> </span><span class="nf">set</span><span class="p">(</span><span class="n">index</span><span class="p">,</span><span class="w"> </span><span class="n">num</span><span class="p">)</span>
|
||||
<a id="__codelineno-90-23" name="__codelineno-90-23" href="#__codelineno-90-23"></a><span class="w"> </span><span class="k">raise</span><span class="w"> </span><span class="no">IndexError</span><span class="p">,</span><span class="w"> </span><span class="s2">"索引越界"</span><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"><</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">index</span><span class="w"> </span><span class="o">>=</span><span class="w"> </span><span class="n">size</span>
|
||||
<a id="__codelineno-90-24" name="__codelineno-90-24" href="#__codelineno-90-24"></a><span class="w"> </span><span class="vi">@arr</span><span class="o">[</span><span class="n">index</span><span class="o">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">num</span>
|
||||
<a id="__codelineno-90-25" name="__codelineno-90-25" href="#__codelineno-90-25"></a><span class="w"> </span><span class="k">end</span>
|
||||
<a id="__codelineno-90-26" name="__codelineno-90-26" href="#__codelineno-90-26"></a>
|
||||
<a id="__codelineno-90-27" name="__codelineno-90-27" href="#__codelineno-90-27"></a><span class="w"> </span><span class="c1">### 在尾部添加元素 ###</span>
|
||||
<a id="__codelineno-90-28" name="__codelineno-90-28" href="#__codelineno-90-28"></a><span class="w"> </span><span class="k">def</span><span class="w"> </span><span class="nf">add</span><span class="p">(</span><span class="n">num</span><span class="p">)</span>
|
||||
<a id="__codelineno-90-29" name="__codelineno-90-29" href="#__codelineno-90-29"></a><span class="w"> </span><span class="c1"># 元素数量超出容量时,触发扩容机制</span>
|
||||
<a id="__codelineno-90-30" name="__codelineno-90-30" href="#__codelineno-90-30"></a><span class="w"> </span><span class="n">extend_capacity</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">size</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">capacity</span>
|
||||
<a id="__codelineno-90-31" name="__codelineno-90-31" href="#__codelineno-90-31"></a><span class="w"> </span><span class="vi">@arr</span><span class="o">[</span><span class="n">size</span><span class="o">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">num</span>
|
||||
<a id="__codelineno-90-32" name="__codelineno-90-32" href="#__codelineno-90-32"></a>
|
||||
<a id="__codelineno-90-33" name="__codelineno-90-33" href="#__codelineno-90-33"></a><span class="w"> </span><span class="c1"># 更新元素数量</span>
|
||||
<a id="__codelineno-90-34" name="__codelineno-90-34" href="#__codelineno-90-34"></a><span class="w"> </span><span class="vi">@size</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="mi">1</span>
|
||||
<a id="__codelineno-90-35" name="__codelineno-90-35" href="#__codelineno-90-35"></a><span class="w"> </span><span class="k">end</span>
|
||||
<a id="__codelineno-90-36" name="__codelineno-90-36" href="#__codelineno-90-36"></a>
|
||||
<a id="__codelineno-90-37" name="__codelineno-90-37" href="#__codelineno-90-37"></a><span class="w"> </span><span class="c1">### 在中间插入元素 ###</span>
|
||||
<a id="__codelineno-90-38" name="__codelineno-90-38" href="#__codelineno-90-38"></a><span class="w"> </span><span class="k">def</span><span class="w"> </span><span class="nf">insert</span><span class="p">(</span><span class="n">index</span><span class="p">,</span><span class="w"> </span><span class="n">num</span><span class="p">)</span>
|
||||
<a id="__codelineno-90-39" name="__codelineno-90-39" href="#__codelineno-90-39"></a><span class="w"> </span><span class="k">raise</span><span class="w"> </span><span class="no">IndexError</span><span class="p">,</span><span class="w"> </span><span class="s2">"索引越界"</span><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"><</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">index</span><span class="w"> </span><span class="o">>=</span><span class="w"> </span><span class="n">size</span>
|
||||
<a id="__codelineno-90-40" name="__codelineno-90-40" href="#__codelineno-90-40"></a>
|
||||
<a id="__codelineno-90-41" name="__codelineno-90-41" href="#__codelineno-90-41"></a><span class="w"> </span><span class="c1"># 元素数量超出容量时,触发扩容机制</span>
|
||||
<a id="__codelineno-90-42" name="__codelineno-90-42" href="#__codelineno-90-42"></a><span class="w"> </span><span class="n">extend_capacity</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">size</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">capacity</span>
|
||||
<a id="__codelineno-90-43" name="__codelineno-90-43" href="#__codelineno-90-43"></a>
|
||||
<a id="__codelineno-90-44" name="__codelineno-90-44" href="#__codelineno-90-44"></a><span class="w"> </span><span class="c1"># 将索引 index 以及之后的元素都向后移动一位</span>
|
||||
<a id="__codelineno-90-45" name="__codelineno-90-45" href="#__codelineno-90-45"></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">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="o">.</span><span class="n">downto</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
|
||||
<a id="__codelineno-90-46" name="__codelineno-90-46" href="#__codelineno-90-46"></a><span class="w"> </span><span class="vi">@arr</span><span class="o">[</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="o">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="vi">@arr</span><span class="o">[</span><span class="n">j</span><span class="o">]</span><span class="w"> </span>
|
||||
<a id="__codelineno-90-47" name="__codelineno-90-47" href="#__codelineno-90-47"></a><span class="w"> </span><span class="k">end</span>
|
||||
<a id="__codelineno-90-48" name="__codelineno-90-48" href="#__codelineno-90-48"></a><span class="w"> </span><span class="vi">@arr</span><span class="o">[</span><span class="n">index</span><span class="o">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">num</span>
|
||||
<a id="__codelineno-90-49" name="__codelineno-90-49" href="#__codelineno-90-49"></a>
|
||||
<a id="__codelineno-90-50" name="__codelineno-90-50" href="#__codelineno-90-50"></a><span class="w"> </span><span class="c1"># 更新元素数量</span>
|
||||
<a id="__codelineno-90-51" name="__codelineno-90-51" href="#__codelineno-90-51"></a><span class="w"> </span><span class="vi">@size</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="mi">1</span>
|
||||
<a id="__codelineno-90-52" name="__codelineno-90-52" href="#__codelineno-90-52"></a><span class="w"> </span><span class="k">end</span>
|
||||
<a id="__codelineno-90-53" name="__codelineno-90-53" href="#__codelineno-90-53"></a>
|
||||
<a id="__codelineno-90-54" name="__codelineno-90-54" href="#__codelineno-90-54"></a><span class="w"> </span><span class="c1">### 删除元素 ###</span>
|
||||
<a id="__codelineno-90-55" name="__codelineno-90-55" href="#__codelineno-90-55"></a><span class="w"> </span><span class="k">def</span><span class="w"> </span><span class="nf">remove</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
|
||||
<a id="__codelineno-90-56" name="__codelineno-90-56" href="#__codelineno-90-56"></a><span class="w"> </span><span class="k">raise</span><span class="w"> </span><span class="no">IndexError</span><span class="p">,</span><span class="w"> </span><span class="s2">"索引越界"</span><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"><</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">index</span><span class="w"> </span><span class="o">>=</span><span class="w"> </span><span class="n">size</span>
|
||||
<a id="__codelineno-90-57" name="__codelineno-90-57" href="#__codelineno-90-57"></a><span class="w"> </span><span class="n">num</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="vi">@arr</span><span class="o">[</span><span class="n">index</span><span class="o">]</span>
|
||||
<a id="__codelineno-90-58" name="__codelineno-90-58" href="#__codelineno-90-58"></a>
|
||||
<a id="__codelineno-90-59" name="__codelineno-90-59" href="#__codelineno-90-59"></a><span class="w"> </span><span class="c1"># 将将索引 index 之后的元素都向前移动一位</span>
|
||||
<a id="__codelineno-90-60" name="__codelineno-90-60" href="#__codelineno-90-60"></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="n">index</span><span class="o">...</span><span class="n">size</span>
|
||||
<a id="__codelineno-90-61" name="__codelineno-90-61" href="#__codelineno-90-61"></a><span class="w"> </span><span class="vi">@arr</span><span class="o">[</span><span class="n">j</span><span class="o">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="vi">@arr</span><span class="o">[</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="o">]</span>
|
||||
<a id="__codelineno-90-62" name="__codelineno-90-62" href="#__codelineno-90-62"></a><span class="w"> </span><span class="k">end</span>
|
||||
<a id="__codelineno-90-63" name="__codelineno-90-63" href="#__codelineno-90-63"></a>
|
||||
<a id="__codelineno-90-64" name="__codelineno-90-64" href="#__codelineno-90-64"></a><span class="w"> </span><span class="c1"># 更新元素数量</span>
|
||||
<a id="__codelineno-90-65" name="__codelineno-90-65" href="#__codelineno-90-65"></a><span class="w"> </span><span class="vi">@size</span><span class="w"> </span><span class="o">-=</span><span class="w"> </span><span class="mi">1</span>
|
||||
<a id="__codelineno-90-66" name="__codelineno-90-66" href="#__codelineno-90-66"></a>
|
||||
<a id="__codelineno-90-67" name="__codelineno-90-67" href="#__codelineno-90-67"></a><span class="w"> </span><span class="c1"># 返回被删除的元素</span>
|
||||
<a id="__codelineno-90-68" name="__codelineno-90-68" href="#__codelineno-90-68"></a><span class="w"> </span><span class="n">num</span>
|
||||
<a id="__codelineno-90-69" name="__codelineno-90-69" href="#__codelineno-90-69"></a><span class="w"> </span><span class="k">end</span>
|
||||
<a id="__codelineno-90-70" name="__codelineno-90-70" href="#__codelineno-90-70"></a>
|
||||
<a id="__codelineno-90-71" name="__codelineno-90-71" href="#__codelineno-90-71"></a><span class="w"> </span><span class="c1">### 列表扩容 ###</span>
|
||||
<a id="__codelineno-90-72" name="__codelineno-90-72" href="#__codelineno-90-72"></a><span class="w"> </span><span class="k">def</span><span class="w"> </span><span class="nf">extend_capacity</span>
|
||||
<a id="__codelineno-90-73" name="__codelineno-90-73" href="#__codelineno-90-73"></a><span class="w"> </span><span class="c1"># 新建一个长度为原数组 extend_ratio 倍的新数组,并将原数组复制到新数组</span>
|
||||
<a id="__codelineno-90-74" name="__codelineno-90-74" href="#__codelineno-90-74"></a><span class="w"> </span><span class="n">arr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="vi">@arr</span><span class="o">.</span><span class="n">dup</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="nb">Array</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="n">capacity</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="p">(</span><span class="vi">@extend_ratio</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-90-75" name="__codelineno-90-75" href="#__codelineno-90-75"></a><span class="w"> </span><span class="c1"># 更新列表容量</span>
|
||||
<a id="__codelineno-90-76" name="__codelineno-90-76" href="#__codelineno-90-76"></a><span class="w"> </span><span class="vi">@capacity</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">arr</span><span class="o">.</span><span class="n">length</span>
|
||||
<a id="__codelineno-90-77" name="__codelineno-90-77" href="#__codelineno-90-77"></a><span class="w"> </span><span class="k">end</span>
|
||||
<a id="__codelineno-90-78" name="__codelineno-90-78" href="#__codelineno-90-78"></a>
|
||||
<a id="__codelineno-90-79" name="__codelineno-90-79" href="#__codelineno-90-79"></a><span class="w"> </span><span class="c1">### 将列表转换为数组 ###</span>
|
||||
<a id="__codelineno-90-80" name="__codelineno-90-80" href="#__codelineno-90-80"></a><span class="w"> </span><span class="k">def</span><span class="w"> </span><span class="nf">to_array</span>
|
||||
<a id="__codelineno-90-81" name="__codelineno-90-81" href="#__codelineno-90-81"></a><span class="w"> </span><span class="n">sz</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">size</span>
|
||||
<a id="__codelineno-90-82" name="__codelineno-90-82" href="#__codelineno-90-82"></a><span class="w"> </span><span class="c1"># 仅转换有效长度范围内的列表元素</span>
|
||||
<a id="__codelineno-90-83" name="__codelineno-90-83" href="#__codelineno-90-83"></a><span class="w"> </span><span class="n">arr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">Array</span><span class="o">.</span><span class="n">new</span><span class="w"> </span><span class="n">sz</span>
|
||||
<a id="__codelineno-90-84" name="__codelineno-90-84" href="#__codelineno-90-84"></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="n">sz</span>
|
||||
<a id="__codelineno-90-85" name="__codelineno-90-85" href="#__codelineno-90-85"></a><span class="w"> </span><span class="n">arr</span><span class="o">[</span><span class="n">i</span><span class="o">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">get</span><span class="w"> </span><span class="n">i</span>
|
||||
<a id="__codelineno-90-86" name="__codelineno-90-86" href="#__codelineno-90-86"></a><span class="w"> </span><span class="k">end</span>
|
||||
<a id="__codelineno-90-87" name="__codelineno-90-87" href="#__codelineno-90-87"></a><span class="w"> </span><span class="n">arr</span>
|
||||
<a id="__codelineno-90-88" name="__codelineno-90-88" href="#__codelineno-90-88"></a><span class="w"> </span><span class="k">end</span>
|
||||
<a id="__codelineno-90-89" name="__codelineno-90-89" href="#__codelineno-90-89"></a><span class="k">end</span>
|
||||
</code></pre></div>
|
||||
</div>
|
||||
<div class="tabbed-block">
|
||||
<div class="highlight"><span class="filename">my_list.zig</span><pre><span></span><code><a id="__codelineno-91-1" name="__codelineno-91-1" href="#__codelineno-91-1"></a><span class="c1">// 列表类</span>
|
||||
<a id="__codelineno-91-2" name="__codelineno-91-2" href="#__codelineno-91-2"></a><span class="k">fn</span><span class="w"> </span><span class="n">MyList</span><span class="p">(</span><span class="kr">comptime</span><span class="w"> </span><span class="n">T</span><span class="o">:</span><span class="w"> </span><span class="kt">type</span><span class="p">)</span><span class="w"> </span><span class="kt">type</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-91-3" name="__codelineno-91-3" href="#__codelineno-91-3"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-91-4" name="__codelineno-91-4" href="#__codelineno-91-4"></a><span class="w"> </span><span class="kr">const</span><span class="w"> </span><span class="n">Self</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">@This</span><span class="p">();</span>
|
||||
<a id="__codelineno-91-5" name="__codelineno-91-5" href="#__codelineno-91-5"></a>
|
||||
<a id="__codelineno-91-6" name="__codelineno-91-6" href="#__codelineno-91-6"></a><span class="w"> </span><span class="n">arr</span><span class="o">:</span><span class="w"> </span><span class="p">[]</span><span class="n">T</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">undefined</span><span class="p">,</span><span class="w"> </span><span class="c1">// 数组(存储列表元素)</span>
|
||||
<a id="__codelineno-91-7" name="__codelineno-91-7" href="#__codelineno-91-7"></a><span class="w"> </span><span class="n">arrCapacity</span><span class="o">:</span><span class="w"> </span><span class="kt">usize</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">10</span><span class="p">,</span><span class="w"> </span><span class="c1">// 列表容量</span>
|
||||
<a id="__codelineno-91-8" name="__codelineno-91-8" href="#__codelineno-91-8"></a><span class="w"> </span><span class="n">numSize</span><span class="o">:</span><span class="w"> </span><span class="kt">usize</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="c1">// 列表长度(当前元素数量)</span>
|
||||
<a id="__codelineno-91-9" name="__codelineno-91-9" href="#__codelineno-91-9"></a><span class="w"> </span><span class="n">extendRatio</span><span class="o">:</span><span class="w"> </span><span class="kt">usize</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="c1">// 每次列表扩容的倍数</span>
|
||||
<a id="__codelineno-91-10" name="__codelineno-91-10" href="#__codelineno-91-10"></a><span class="w"> </span><span class="n">mem_arena</span><span class="o">:</span><span class="w"> </span><span class="o">?</span><span class="n">std</span><span class="p">.</span><span class="n">heap</span><span class="p">.</span><span class="n">ArenaAllocator</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span>
|
||||
<a id="__codelineno-91-11" name="__codelineno-91-11" href="#__codelineno-91-11"></a><span class="w"> </span><span class="n">mem_allocator</span><span class="o">:</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">mem</span><span class="p">.</span><span class="n">Allocator</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">undefined</span><span class="p">,</span><span class="w"> </span><span class="c1">// 内存分配器</span>
|
||||
<a id="__codelineno-91-12" name="__codelineno-91-12" href="#__codelineno-91-12"></a>
|
||||
<a id="__codelineno-91-13" name="__codelineno-91-13" href="#__codelineno-91-13"></a><span class="w"> </span><span class="c1">// 构造函数(分配内存+初始化列表)</span>
|
||||
<a id="__codelineno-91-14" name="__codelineno-91-14" href="#__codelineno-91-14"></a><span class="w"> </span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">init</span><span class="p">(</span><span class="n">self</span><span class="o">:</span><span class="w"> </span><span class="o">*</span><span class="n">Self</span><span class="p">,</span><span class="w"> </span><span class="n">allocator</span><span class="o">:</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">mem</span><span class="p">.</span><span class="n">Allocator</span><span class="p">)</span><span class="w"> </span><span class="o">!</span><span class="kt">void</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-91-15" name="__codelineno-91-15" href="#__codelineno-91-15"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">mem_arena</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-91-16" name="__codelineno-91-16" href="#__codelineno-91-16"></a><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">mem_arena</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">heap</span><span class="p">.</span><span class="n">ArenaAllocator</span><span class="p">.</span><span class="n">init</span><span class="p">(</span><span class="n">allocator</span><span class="p">);</span>
|
||||
<a id="__codelineno-91-17" name="__codelineno-91-17" href="#__codelineno-91-17"></a><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">mem_allocator</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">mem_arena</span><span class="p">.</span><span class="o">?</span><span class="p">.</span><span class="n">allocator</span><span class="p">();</span>
|
||||
<a id="__codelineno-91-18" name="__codelineno-91-18" href="#__codelineno-91-18"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-91-19" name="__codelineno-91-19" href="#__codelineno-91-19"></a><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">arr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">mem_allocator</span><span class="p">.</span><span class="n">alloc</span><span class="p">(</span><span class="n">T</span><span class="p">,</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">arrCapacity</span><span class="p">);</span>
|
||||
<a id="__codelineno-91-20" name="__codelineno-91-20" href="#__codelineno-91-20"></a><span class="w"> </span><span class="nb">@memset</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">arr</span><span class="p">,</span><span class="w"> </span><span class="nb">@as</span><span class="p">(</span><span class="n">T</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">));</span>
|
||||
<a id="__codelineno-91-21" name="__codelineno-91-21" href="#__codelineno-91-21"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-91-22" name="__codelineno-91-22" href="#__codelineno-91-22"></a>
|
||||
<a id="__codelineno-91-23" name="__codelineno-91-23" href="#__codelineno-91-23"></a><span class="w"> </span><span class="c1">// 析构函数(释放内存)</span>
|
||||
<a id="__codelineno-91-24" name="__codelineno-91-24" href="#__codelineno-91-24"></a><span class="w"> </span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">deinit</span><span class="p">(</span><span class="n">self</span><span class="o">:</span><span class="w"> </span><span class="o">*</span><span class="n">Self</span><span class="p">)</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-91-25" name="__codelineno-91-25" href="#__codelineno-91-25"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">mem_arena</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span><span class="w"> </span><span class="k">return</span><span class="p">;</span>
|
||||
<a id="__codelineno-91-26" name="__codelineno-91-26" href="#__codelineno-91-26"></a><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">mem_arena</span><span class="p">.</span><span class="o">?</span><span class="p">.</span><span class="n">deinit</span><span class="p">();</span>
|
||||
<a id="__codelineno-91-27" name="__codelineno-91-27" href="#__codelineno-91-27"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-91-28" name="__codelineno-91-28" href="#__codelineno-91-28"></a>
|
||||
<a id="__codelineno-91-29" name="__codelineno-91-29" href="#__codelineno-91-29"></a><span class="w"> </span><span class="c1">// 获取列表长度(当前元素数量)</span>
|
||||
<a id="__codelineno-91-30" name="__codelineno-91-30" href="#__codelineno-91-30"></a><span class="w"> </span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">size</span><span class="p">(</span><span class="n">self</span><span class="o">:</span><span class="w"> </span><span class="o">*</span><span class="n">Self</span><span class="p">)</span><span class="w"> </span><span class="kt">usize</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-91-31" name="__codelineno-91-31" href="#__codelineno-91-31"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">numSize</span><span class="p">;</span>
|
||||
<a id="__codelineno-91-32" name="__codelineno-91-32" href="#__codelineno-91-32"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-91-33" name="__codelineno-91-33" href="#__codelineno-91-33"></a>
|
||||
<a id="__codelineno-91-34" name="__codelineno-91-34" href="#__codelineno-91-34"></a><span class="w"> </span><span class="c1">// 获取列表容量</span>
|
||||
<a id="__codelineno-91-35" name="__codelineno-91-35" href="#__codelineno-91-35"></a><span class="w"> </span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">capacity</span><span class="p">(</span><span class="n">self</span><span class="o">:</span><span class="w"> </span><span class="o">*</span><span class="n">Self</span><span class="p">)</span><span class="w"> </span><span class="kt">usize</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-91-36" name="__codelineno-91-36" href="#__codelineno-91-36"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">arrCapacity</span><span class="p">;</span>
|
||||
<a id="__codelineno-91-37" name="__codelineno-91-37" href="#__codelineno-91-37"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-91-38" name="__codelineno-91-38" href="#__codelineno-91-38"></a>
|
||||
<a id="__codelineno-91-39" name="__codelineno-91-39" href="#__codelineno-91-39"></a><span class="w"> </span><span class="c1">// 访问元素</span>
|
||||
<a id="__codelineno-91-40" name="__codelineno-91-40" href="#__codelineno-91-40"></a><span class="w"> </span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">get</span><span class="p">(</span><span class="n">self</span><span class="o">:</span><span class="w"> </span><span class="o">*</span><span class="n">Self</span><span class="p">,</span><span class="w"> </span><span class="n">index</span><span class="o">:</span><span class="w"> </span><span class="kt">usize</span><span class="p">)</span><span class="w"> </span><span class="n">T</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-91-41" name="__codelineno-91-41" href="#__codelineno-91-41"></a><span class="w"> </span><span class="c1">// 索引如果越界,则抛出异常,下同</span>
|
||||
<a id="__codelineno-91-42" name="__codelineno-91-42" href="#__codelineno-91-42"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">index</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="k">or</span><span class="w"> </span><span class="n">index</span><span class="w"> </span><span class="o">>=</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">size</span><span class="p">())</span><span class="w"> </span><span class="nb">@panic</span><span class="p">(</span><span class="s">"索引越界"</span><span class="p">);</span>
|
||||
<a id="__codelineno-91-43" name="__codelineno-91-43" href="#__codelineno-91-43"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">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-91-44" name="__codelineno-91-44" href="#__codelineno-91-44"></a><span class="w"> </span><span class="p">}</span><span class="w"> </span>
|
||||
<a id="__codelineno-91-45" name="__codelineno-91-45" href="#__codelineno-91-45"></a>
|
||||
<a id="__codelineno-91-46" name="__codelineno-91-46" href="#__codelineno-91-46"></a><span class="w"> </span><span class="c1">// 更新元素</span>
|
||||
<a id="__codelineno-91-47" name="__codelineno-91-47" href="#__codelineno-91-47"></a><span class="w"> </span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">set</span><span class="p">(</span><span class="n">self</span><span class="o">:</span><span class="w"> </span><span class="o">*</span><span class="n">Self</span><span class="p">,</span><span class="w"> </span><span class="n">index</span><span class="o">:</span><span class="w"> </span><span class="kt">usize</span><span class="p">,</span><span class="w"> </span><span class="n">num</span><span class="o">:</span><span class="w"> </span><span class="n">T</span><span class="p">)</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-91-48" name="__codelineno-91-48" href="#__codelineno-91-48"></a><span class="w"> </span><span class="c1">// 索引如果越界,则抛出异常,下同</span>
|
||||
<a id="__codelineno-91-49" name="__codelineno-91-49" href="#__codelineno-91-49"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">index</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="k">or</span><span class="w"> </span><span class="n">index</span><span class="w"> </span><span class="o">>=</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">size</span><span class="p">())</span><span class="w"> </span><span class="nb">@panic</span><span class="p">(</span><span class="s">"索引越界"</span><span class="p">);</span>
|
||||
<a id="__codelineno-91-50" name="__codelineno-91-50" href="#__codelineno-91-50"></a><span class="w"> </span><span class="n">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-91-51" name="__codelineno-91-51" href="#__codelineno-91-51"></a><span class="w"> </span><span class="p">}</span><span class="w"> </span>
|
||||
<a id="__codelineno-91-52" name="__codelineno-91-52" href="#__codelineno-91-52"></a>
|
||||
<a id="__codelineno-91-53" name="__codelineno-91-53" href="#__codelineno-91-53"></a><span class="w"> </span><span class="c1">// 在尾部添加元素</span>
|
||||
<a id="__codelineno-91-54" name="__codelineno-91-54" href="#__codelineno-91-54"></a><span class="w"> </span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">add</span><span class="p">(</span><span class="n">self</span><span class="o">:</span><span class="w"> </span><span class="o">*</span><span class="n">Self</span><span class="p">,</span><span class="w"> </span><span class="n">num</span><span class="o">:</span><span class="w"> </span><span class="n">T</span><span class="p">)</span><span class="w"> </span><span class="o">!</span><span class="kt">void</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-91-55" name="__codelineno-91-55" href="#__codelineno-91-55"></a><span class="w"> </span><span class="c1">// 元素数量超出容量时,触发扩容机制</span>
|
||||
<a id="__codelineno-91-56" name="__codelineno-91-56" href="#__codelineno-91-56"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">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">self</span><span class="p">.</span><span class="n">capacity</span><span class="p">())</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">extendCapacity</span><span class="p">();</span>
|
||||
<a id="__codelineno-91-57" name="__codelineno-91-57" href="#__codelineno-91-57"></a><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">arr</span><span class="p">[</span><span class="n">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-91-58" name="__codelineno-91-58" href="#__codelineno-91-58"></a><span class="w"> </span><span class="c1">// 更新元素数量</span>
|
||||
<a id="__codelineno-91-59" name="__codelineno-91-59" href="#__codelineno-91-59"></a><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">numSize</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-91-60" name="__codelineno-91-60" href="#__codelineno-91-60"></a><span class="w"> </span><span class="p">}</span><span class="w"> </span>
|
||||
<a id="__codelineno-91-61" name="__codelineno-91-61" href="#__codelineno-91-61"></a>
|
||||
<a id="__codelineno-91-62" name="__codelineno-91-62" href="#__codelineno-91-62"></a><span class="w"> </span><span class="c1">// 在中间插入元素</span>
|
||||
<a id="__codelineno-91-63" name="__codelineno-91-63" href="#__codelineno-91-63"></a><span class="w"> </span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">insert</span><span class="p">(</span><span class="n">self</span><span class="o">:</span><span class="w"> </span><span class="o">*</span><span class="n">Self</span><span class="p">,</span><span class="w"> </span><span class="n">index</span><span class="o">:</span><span class="w"> </span><span class="kt">usize</span><span class="p">,</span><span class="w"> </span><span class="n">num</span><span class="o">:</span><span class="w"> </span><span class="n">T</span><span class="p">)</span><span class="w"> </span><span class="o">!</span><span class="kt">void</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-91-64" name="__codelineno-91-64" href="#__codelineno-91-64"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">index</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="k">or</span><span class="w"> </span><span class="n">index</span><span class="w"> </span><span class="o">>=</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">size</span><span class="p">())</span><span class="w"> </span><span class="nb">@panic</span><span class="p">(</span><span class="s">"索引越界"</span><span class="p">);</span>
|
||||
<a id="__codelineno-91-65" name="__codelineno-91-65" href="#__codelineno-91-65"></a><span class="w"> </span><span class="c1">// 元素数量超出容量时,触发扩容机制</span>
|
||||
<a id="__codelineno-91-66" name="__codelineno-91-66" href="#__codelineno-91-66"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">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">self</span><span class="p">.</span><span class="n">capacity</span><span class="p">())</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">extendCapacity</span><span class="p">();</span>
|
||||
<a id="__codelineno-91-67" name="__codelineno-91-67" href="#__codelineno-91-67"></a><span class="w"> </span><span class="c1">// 将索引 index 以及之后的元素都向后移动一位</span>
|
||||
<a id="__codelineno-91-68" name="__codelineno-91-68" href="#__codelineno-91-68"></a><span class="w"> </span><span class="kr">var</span><span class="w"> </span><span class="n">j</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">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="mi">1</span><span class="p">;</span>
|
||||
<a id="__codelineno-91-69" name="__codelineno-91-69" href="#__codelineno-91-69"></a><span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="n">j</span><span class="w"> </span><span class="o">>=</span><span class="w"> </span><span class="n">index</span><span class="p">)</span><span class="w"> </span><span class="o">:</span><span class="w"> </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="p">{</span>
|
||||
<a id="__codelineno-91-70" name="__codelineno-91-70" href="#__codelineno-91-70"></a><span class="w"> </span><span class="n">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="n">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-91-71" name="__codelineno-91-71" href="#__codelineno-91-71"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-91-72" name="__codelineno-91-72" href="#__codelineno-91-72"></a><span class="w"> </span><span class="n">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-91-73" name="__codelineno-91-73" href="#__codelineno-91-73"></a><span class="w"> </span><span class="c1">// 更新元素数量</span>
|
||||
<a id="__codelineno-91-74" name="__codelineno-91-74" href="#__codelineno-91-74"></a><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">numSize</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-91-75" name="__codelineno-91-75" href="#__codelineno-91-75"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-91-76" name="__codelineno-91-76" href="#__codelineno-91-76"></a>
|
||||
<a id="__codelineno-91-77" name="__codelineno-91-77" href="#__codelineno-91-77"></a><span class="w"> </span><span class="c1">// 删除元素</span>
|
||||
<a id="__codelineno-91-78" name="__codelineno-91-78" href="#__codelineno-91-78"></a><span class="w"> </span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">remove</span><span class="p">(</span><span class="n">self</span><span class="o">:</span><span class="w"> </span><span class="o">*</span><span class="n">Self</span><span class="p">,</span><span class="w"> </span><span class="n">index</span><span class="o">:</span><span class="w"> </span><span class="kt">usize</span><span class="p">)</span><span class="w"> </span><span class="n">T</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-91-79" name="__codelineno-91-79" href="#__codelineno-91-79"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">index</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="k">or</span><span class="w"> </span><span class="n">index</span><span class="w"> </span><span class="o">>=</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">size</span><span class="p">())</span><span class="w"> </span><span class="nb">@panic</span><span class="p">(</span><span class="s">"索引越界"</span><span class="p">);</span>
|
||||
<a id="__codelineno-91-80" name="__codelineno-91-80" href="#__codelineno-91-80"></a><span class="w"> </span><span class="kr">var</span><span class="w"> </span><span class="n">num</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">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-91-81" name="__codelineno-91-81" href="#__codelineno-91-81"></a><span class="w"> </span><span class="c1">// 将索引 index 之后的元素都向前移动一位</span>
|
||||
<a id="__codelineno-91-82" name="__codelineno-91-82" href="#__codelineno-91-82"></a><span class="w"> </span><span class="kr">var</span><span class="w"> </span><span class="n">j</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">index</span><span class="p">;</span>
|
||||
<a id="__codelineno-91-83" name="__codelineno-91-83" href="#__codelineno-91-83"></a><span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="n">j</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">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="mi">1</span><span class="p">)</span><span class="w"> </span><span class="o">:</span><span class="w"> </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="p">{</span>
|
||||
<a id="__codelineno-91-84" name="__codelineno-91-84" href="#__codelineno-91-84"></a><span class="w"> </span><span class="n">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="n">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-91-85" name="__codelineno-91-85" href="#__codelineno-91-85"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-91-86" name="__codelineno-91-86" href="#__codelineno-91-86"></a><span class="w"> </span><span class="c1">// 更新元素数量</span>
|
||||
<a id="__codelineno-91-87" name="__codelineno-91-87" href="#__codelineno-91-87"></a><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">numSize</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-91-88" name="__codelineno-91-88" href="#__codelineno-91-88"></a><span class="w"> </span><span class="c1">// 返回被删除的元素</span>
|
||||
<a id="__codelineno-91-89" name="__codelineno-91-89" href="#__codelineno-91-89"></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-91-90" name="__codelineno-91-90" href="#__codelineno-91-90"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-91-91" name="__codelineno-91-91" href="#__codelineno-91-91"></a>
|
||||
<a id="__codelineno-91-92" name="__codelineno-91-92" href="#__codelineno-91-92"></a><span class="w"> </span><span class="c1">// 列表扩容</span>
|
||||
<a id="__codelineno-91-93" name="__codelineno-91-93" href="#__codelineno-91-93"></a><span class="w"> </span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">extendCapacity</span><span class="p">(</span><span class="n">self</span><span class="o">:</span><span class="w"> </span><span class="o">*</span><span class="n">Self</span><span class="p">)</span><span class="w"> </span><span class="o">!</span><span class="kt">void</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-91-94" name="__codelineno-91-94" href="#__codelineno-91-94"></a><span class="w"> </span><span class="c1">// 新建一个长度为 size * extendRatio 的数组,并将原数组复制到新数组</span>
|
||||
<a id="__codelineno-91-95" name="__codelineno-91-95" href="#__codelineno-91-95"></a><span class="w"> </span><span class="kr">var</span><span class="w"> </span><span class="n">newCapacity</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">capacity</span><span class="p">()</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">extendRatio</span><span class="p">;</span>
|
||||
<a id="__codelineno-91-96" name="__codelineno-91-96" href="#__codelineno-91-96"></a><span class="w"> </span><span class="kr">var</span><span class="w"> </span><span class="n">extend</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">mem_allocator</span><span class="p">.</span><span class="n">alloc</span><span class="p">(</span><span class="n">T</span><span class="p">,</span><span class="w"> </span><span class="n">newCapacity</span><span class="p">);</span>
|
||||
<a id="__codelineno-91-97" name="__codelineno-91-97" href="#__codelineno-91-97"></a><span class="w"> </span><span class="nb">@memset</span><span class="p">(</span><span class="n">extend</span><span class="p">,</span><span class="w"> </span><span class="nb">@as</span><span class="p">(</span><span class="n">T</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">));</span>
|
||||
<a id="__codelineno-91-98" name="__codelineno-91-98" href="#__codelineno-91-98"></a><span class="w"> </span><span class="c1">// 将原数组中的所有元素复制到新数组</span>
|
||||
<a id="__codelineno-91-99" name="__codelineno-91-99" href="#__codelineno-91-99"></a><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">mem</span><span class="p">.</span><span class="n">copy</span><span class="p">(</span><span class="n">T</span><span class="p">,</span><span class="w"> </span><span class="n">extend</span><span class="p">,</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">arr</span><span class="p">);</span>
|
||||
<a id="__codelineno-91-100" name="__codelineno-91-100" href="#__codelineno-91-100"></a><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">arr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">extend</span><span class="p">;</span>
|
||||
<a id="__codelineno-91-101" name="__codelineno-91-101" href="#__codelineno-91-101"></a><span class="w"> </span><span class="c1">// 更新列表容量</span>
|
||||
<a id="__codelineno-91-102" name="__codelineno-91-102" href="#__codelineno-91-102"></a><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">arrCapacity</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">newCapacity</span><span class="p">;</span>
|
||||
<a id="__codelineno-91-103" name="__codelineno-91-103" href="#__codelineno-91-103"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-91-104" name="__codelineno-91-104" href="#__codelineno-91-104"></a>
|
||||
<a id="__codelineno-91-105" name="__codelineno-91-105" href="#__codelineno-91-105"></a><span class="w"> </span><span class="c1">// 将列表转换为数组</span>
|
||||
<a id="__codelineno-91-106" name="__codelineno-91-106" href="#__codelineno-91-106"></a><span class="w"> </span><span class="kr">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="n">toArray</span><span class="p">(</span><span class="n">self</span><span class="o">:</span><span class="w"> </span><span class="o">*</span><span class="n">Self</span><span class="p">)</span><span class="w"> </span><span class="o">!</span><span class="p">[]</span><span class="n">T</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-91-107" name="__codelineno-91-107" href="#__codelineno-91-107"></a><span class="w"> </span><span class="c1">// 仅转换有效长度范围内的列表元素</span>
|
||||
<a id="__codelineno-91-108" name="__codelineno-91-108" href="#__codelineno-91-108"></a><span class="w"> </span><span class="kr">var</span><span class="w"> </span><span class="n">arr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">mem_allocator</span><span class="p">.</span><span class="n">alloc</span><span class="p">(</span><span class="n">T</span><span class="p">,</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">size</span><span class="p">());</span>
|
||||
<a id="__codelineno-91-109" name="__codelineno-91-109" href="#__codelineno-91-109"></a><span class="w"> </span><span class="nb">@memset</span><span class="p">(</span><span class="n">arr</span><span class="p">,</span><span class="w"> </span><span class="nb">@as</span><span class="p">(</span><span class="n">T</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">));</span>
|
||||
<a id="__codelineno-91-110" name="__codelineno-91-110" href="#__codelineno-91-110"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">arr</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">..)</span><span class="w"> </span><span class="o">|*</span><span class="n">num</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="o">|</span><span class="w"> </span><span class="p">{</span>
|
||||
<a id="__codelineno-91-111" name="__codelineno-91-111" href="#__codelineno-91-111"></a><span class="w"> </span><span class="n">num</span><span class="p">.</span><span class="o">*</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">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-91-112" name="__codelineno-91-112" href="#__codelineno-91-112"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-91-113" name="__codelineno-91-113" href="#__codelineno-91-113"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">arr</span><span class="p">;</span>
|
||||
<a id="__codelineno-91-114" name="__codelineno-91-114" href="#__codelineno-91-114"></a><span class="w"> </span><span class="p">}</span>
|
||||
<a id="__codelineno-91-115" name="__codelineno-91-115" href="#__codelineno-91-115"></a><span class="w"> </span><span class="p">};</span>
|
||||
<a id="__codelineno-91-116" name="__codelineno-91-116" href="#__codelineno-91-116"></a><span class="p">}</span>
|
||||
</code></pre></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user