-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsearch.xml
More file actions
134 lines (64 loc) · 53 KB
/
search.xml
File metadata and controls
134 lines (64 loc) · 53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
<?xml version="1.0" encoding="utf-8"?>
<search>
<entry>
<title>The hiding rule in C++</title>
<link href="/2019/09/13/The-hiding-rule-in-C/"/>
<url>/2019/09/13/The-hiding-rule-in-C/</url>
<content type="html"><![CDATA[<h2 id="是什么"><a href="#是什么" class="headerlink" title="是什么"></a>是什么</h2><p>更里层的scope里的变量名会使外层的同名变量被隐藏,即使该名字是一个签名不一样的函数。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line">#include <iostream></span><br><span class="line">#include <typeinfo></span><br><span class="line">using namespace std;</span><br><span class="line"></span><br><span class="line">namespace A {</span><br><span class="line"> char x;</span><br><span class="line">};</span><br><span class="line"></span><br><span class="line">namespace B {</span><br><span class="line"> using namespace A;</span><br><span class="line"> int x;</span><br><span class="line">};</span><br><span class="line"></span><br><span class="line">int main() {</span><br><span class="line"> cout << typeid(B::x).name() << endl;</span><br><span class="line">}</span><br></pre></td></tr></table></figure><p>将会输出:<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">int</span><br></pre></td></tr></table></figure></p><h2 id="问题"><a href="#问题" class="headerlink" title="问题"></a>问题</h2><p>如果在继承类里定义一个函数<code>f</code>, 则基类里的所有名为<code>f</code>的函数都将被隐藏,即使返回类型和参数不一样。<br><a id="more"></a><br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">struct A {</span><br><span class="line"> void f() { }</span><br><span class="line">};</span><br><span class="line"></span><br><span class="line">struct B : A {</span><br><span class="line"> void f(int) { }</span><br><span class="line">};</span><br><span class="line"></span><br><span class="line">int main() {</span><br><span class="line"> B obj_B;</span><br><span class="line"> obj_B.f(3);</span><br><span class="line">// obj_B.f(); // 编译报错 f()未定义</span><br><span class="line">}</span><br></pre></td></tr></table></figure></p><p>我们可以用<code>using</code>声明使基类的所有<code>f</code>可见。继承类里的重定义会覆盖基类的定义。<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line">#include <iostream></span><br><span class="line">using namespace std;</span><br><span class="line"></span><br><span class="line">struct A {</span><br><span class="line"> void f() { cout << "void A::f()" << endl; }</span><br><span class="line"> void f(int) { cout << "void A::f(int)" << endl; }</span><br><span class="line">};</span><br><span class="line"></span><br><span class="line">struct B : A {</span><br><span class="line"> using A::f;</span><br><span class="line"> void f(int) { cout << "void B::f(int)" << endl; }</span><br><span class="line">};</span><br><span class="line"></span><br><span class="line">int main() {</span><br><span class="line"> B obj_B;</span><br><span class="line"> obj_B.f(3);</span><br><span class="line"> obj_B.f();</span><br><span class="line">}</span><br></pre></td></tr></table></figure></p><p>将会输出:<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">void B::f(int)</span><br><span class="line">void A::f()</span><br></pre></td></tr></table></figure></p><h2 id="Public-Overloaded-Non-Virtuals-Call-Protected-Non-Overloaded-Virtuals"><a href="#Public-Overloaded-Non-Virtuals-Call-Protected-Non-Overloaded-Virtuals" class="headerlink" title="Public Overloaded Non-Virtuals Call Protected Non-Overloaded Virtuals"></a>Public Overloaded Non-Virtuals Call Protected Non-Overloaded Virtuals</h2><p>将本需使用<code>public</code>重载虚函数来定义的一组函数,通过<code>public</code>重载非虚函数和<code>protected</code>不重载虚函数这种方式来定义。如:<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">class Base {</span><br><span class="line">public:</span><br><span class="line"> virtual void f(int x);</span><br><span class="line"> virtual void f(double x);</span><br><span class="line">};</span><br></pre></td></tr></table></figure></p><p>可定义为:<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">class Base {</span><br><span class="line">public:</span><br><span class="line"> void f(int x) { f_int(x); } // Non-virtual</span><br><span class="line"> void f(double x) { f_dbl(x); } // Non-virtual</span><br><span class="line">protected:</span><br><span class="line"> virtual void f_int(int);</span><br><span class="line"> virtual void f_dbl(double);</span><br><span class="line">};</span><br></pre></td></tr></table></figure></p><p>这种方式下,隐藏规则导致的风险在基类处理掉了。</p><p><strong>参考</strong></p><p><a href="https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.3.0/com.ibm.zos.v2r3.cbclx01/name_hiding.htm" target="_blank" rel="noopener">Name hiding - IBM Knowledge Center</a></p><p><a href="https://www.ibm.com/support/knowledgecenter/SSLTBW_2.1.0/com.ibm.zos.v2r1.cbclx01/overload_member_fn_base_derived.htm" target="_blank" rel="noopener">Overloading member functions from base and derived classes - IBM Knowledge Center</a></p><p><a href="https://isocpp.org/wiki/faq/strange-inheritance#protected-virtuals" target="_blank" rel="noopener">Should I use protected virtuals instead of public virtuals? - isocpp</a></p>]]></content>
<categories>
<category> C/C++ </category>
</categories>
<tags>
<tag> hide </tag>
<tag> inheritance </tag>
</tags>
</entry>
<entry>
<title>Array Left Rotation</title>
<link href="/2017/08/23/array-left-rotation/"/>
<url>/2017/08/23/array-left-rotation/</url>
<content type="html"><![CDATA[<blockquote><p>A <em>left rotation</em> operation on an array of size n shifts each of the array’s elements 1 unit to the left. For example, if 2 left rotations are performed on array [1, 2, 3, 4, 5], then the array would become [3, 4, 5, 1, 2] .<br>Given an array of n integers a, and a number k, perform k left rotations on the array.</p></blockquote><p><a href="https://www.hackerrank.com/challenges/ctci-array-left-rotation/problem" target="_blank" rel="noopener">HackerRank</a></p><p>Here we want solutions with O(1) additional space and O(n) time complexity.<br><a id="more"></a></p><h1 id="My-solution"><a href="#My-solution" class="headerlink" title="My solution"></a>My solution</h1><p> Note that the element at index <code>i</code> is moved to <code>(i-k) % n</code>.<br> Let n = 15 and k = 6, then </p><p> a[0] <- a[6] <- a[12] <- a[3] <- a[9] <- a[0],</p><p> a[1] <- a[7] <- a[13] <- a[4] <- a[10] <- a[1],</p><p> a[2] <- a[8] <- a[14] <- a[5] <- a[11] <- a[2].</p><p> Clearly, it forms 3 circles, and the 3 circles cover all the movement. 3 is the greatest common divisor (gcd) of 15 and 6.</p><p> It should be easy to prove that, the rotation can be broken down to g (gcd of n and k) smaller circles, and within every circle are elements at index i, (i+k)%n, … We only need to rotate each circle by one step.</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><iostream></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><vector></span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">gcd</span><span class="params">(<span class="keyword">int</span> a, <span class="keyword">int</span> b)</span> </span>{</span><br><span class="line"> <span class="keyword">if</span> (b==<span class="number">0</span>) <span class="keyword">return</span> a;</span><br><span class="line"> <span class="keyword">else</span> <span class="keyword">return</span> gcd(b, a%b);</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="built_in">vector</span><<span class="keyword">int</span>> array_left_rotation(<span class="built_in">vector</span><<span class="keyword">int</span>> a, <span class="keyword">int</span> n, <span class="keyword">int</span> k) {</span><br><span class="line"> <span class="keyword">if</span> (k==n) <span class="keyword">return</span> a;</span><br><span class="line"> <span class="keyword">int</span> g = gcd (n, k);</span><br><span class="line"> <span class="keyword">for</span> (<span class="keyword">int</span> j=<span class="number">0</span>; j< g; j++) { </span><br><span class="line"> <span class="keyword">int</span> tmp = a[j], i = j, to_i = (i+k)%n;</span><br><span class="line"> <span class="keyword">while</span> (to_i !=j) {</span><br><span class="line"> a[i] = a[to_i];</span><br><span class="line"> i = to_i;</span><br><span class="line"> to_i = (i+k)%n;</span><br><span class="line"> }</span><br><span class="line"> a[i] = tmp;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> a;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>{</span><br><span class="line"> <span class="keyword">int</span> n;</span><br><span class="line"> <span class="keyword">int</span> k;</span><br><span class="line"> <span class="built_in">cin</span> >> n >> k;</span><br><span class="line"> <span class="built_in">vector</span><<span class="keyword">int</span>> a(n);</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> a_i = <span class="number">0</span>;a_i < n;a_i++){</span><br><span class="line"> <span class="built_in">cin</span> >> a[a_i];</span><br><span class="line"> }</span><br><span class="line"> <span class="built_in">vector</span><<span class="keyword">int</span>> output = array_left_rotation(a, n, k);</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i = <span class="number">0</span>; i < n;i++)</span><br><span class="line"> <span class="built_in">cout</span> << output[i] << <span class="string">" "</span>;</span><br><span class="line"> <span class="built_in">cout</span> << <span class="built_in">endl</span>;</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure><p>There is another solution from the book, <em>Programming Pearls</em>.</p><h1 id="Solution-2"><a href="#Solution-2" class="headerlink" title="Solution 2"></a>Solution 2</h1><p><strong>Observation</strong>:</p><p>for an array {a[0], a[1],… a[k-1], a[k], a[k+1],…a[n-1]}, after the rotation, it becomes {a[k], a[k+1]…a[n-1], a[0], a[1]… a[k-1]}. Let’s notate the a[0]~a[k-1] part as A, the latter part a[k]~ a[n-1] as B. Then what the rotation does is actually transfering AB to BA.</p><p><strong>Solution</strong>: </p><ul><li>First, reverse AB as a whole: AB -> BrAr.</li><li>Then, reverse Ar, Br individually: BrAr -> BA</li></ul><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// pay attention to the & in the parameter</span></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">swap</span><span class="params">(<span class="built_in">vector</span><<span class="keyword">int</span>> &a, <span class="keyword">int</span> m, <span class="keyword">int</span> l)</span> </span>{</span><br><span class="line"> <span class="keyword">int</span> tmp = a[m];</span><br><span class="line"> a[m] = a[l];</span><br><span class="line"> a[l] = tmp;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"><span class="built_in">vector</span><<span class="keyword">int</span>> array_left_rotation(<span class="built_in">vector</span><<span class="keyword">int</span>> a, <span class="keyword">int</span> n, <span class="keyword">int</span> k) {</span><br><span class="line"> <span class="keyword">if</span> (k==n) <span class="keyword">return</span> a;</span><br><span class="line"> <span class="comment">// reverse AB as a whole</span></span><br><span class="line"> <span class="keyword">for</span> (<span class="keyword">int</span> i=<span class="number">0</span>; i < n<span class="number">-1</span>-i; i++) {</span><br><span class="line"> swap(a, i, n<span class="number">-1</span>-i);</span><br><span class="line"> }</span><br><span class="line"> <span class="comment">// reverse Br</span></span><br><span class="line"> <span class="keyword">for</span> (<span class="keyword">int</span> i=<span class="number">0</span>; i< n-k<span class="number">-1</span>-i; i++) {</span><br><span class="line"> swap(a, i, n-k<span class="number">-1</span>-i);</span><br><span class="line"> }</span><br><span class="line"> <span class="comment">// reverse Ar</span></span><br><span class="line"> <span class="keyword">for</span> (<span class="keyword">int</span> i= n-k; i < <span class="number">2</span>*n-k-i<span class="number">-1</span>;i++) {</span><br><span class="line"> swap(a, i, <span class="number">2</span>*n-k-i<span class="number">-1</span>);</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> a;</span><br><span class="line">}</span><br></pre></td></tr></table></figure><p>This works, but it’s kind of tiring to get all the indices right to the <code>swap()</code> call.<br>Let’s try with a <code>reverse()</code> helper function. And also, reverse A, B individually first, and then reverse ArBr as a whole, then we get BA.</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">reverse</span><span class="params">(<span class="built_in">vector</span><<span class="keyword">int</span>> &a, <span class="keyword">int</span> low, <span class="keyword">int</span> high)</span> </span>{</span><br><span class="line"> <span class="keyword">while</span> (low < high) {</span><br><span class="line"> <span class="keyword">int</span> tmp = a[low];</span><br><span class="line"> a[low] = a[high];</span><br><span class="line"> a[high] = tmp;</span><br><span class="line"> low++; high--;</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="built_in">vector</span><<span class="keyword">int</span>> array_left_rotation(<span class="built_in">vector</span><<span class="keyword">int</span>> a, <span class="keyword">int</span> n, <span class="keyword">int</span> k) {</span><br><span class="line"> <span class="keyword">if</span> (k==n) <span class="keyword">return</span> a;</span><br><span class="line"> <span class="comment">// reverse A</span></span><br><span class="line"> reverse(a, <span class="number">0</span>, k<span class="number">-1</span>);</span><br><span class="line"> <span class="comment">// reverse B</span></span><br><span class="line"> reverse(a, k, n<span class="number">-1</span>);</span><br><span class="line"> <span class="comment">// reverse ArBr as a whole</span></span><br><span class="line"> reverse(a, <span class="number">0</span>, n<span class="number">-1</span>);</span><br><span class="line"> <span class="keyword">return</span> a;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>]]></content>
<categories>
<category> algorithm </category>
</categories>
<tags>
<tag> rotation </tag>
</tags>
</entry>
<entry>
<title>shell tips</title>
<link href="/2017/05/11/shell-tips/"/>
<url>/2017/05/11/shell-tips/</url>
<content type="html"><![CDATA[<h2 id="通配符"><a href="#通配符" class="headerlink" title="通配符 *"></a>通配符 *</h2><p>shell 将通配符<code>*</code>替换为当前目录下的各个文件和目录,然后再传给命令。<br>比如<code>ls *</code>是ls(<code>当前目录下的所有文件</code> + <code>当前目录下所有文件夹</code>), 其中ls(<code>当前目录下所有文件夹</code>) 将会列举这些文件夹下的文件(夹)</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">➜ ls -p <span class="comment"># append '/' at the end of a directory</span></span><br><span class="line">pkg/ tmp</span><br><span class="line"></span><br><span class="line">➜ ls *</span><br><span class="line">tmp</span><br><span class="line"></span><br><span class="line">pkg: <span class="comment"># list content in directory pkg</span></span><br><span class="line">a.tgz.gpg read.sh</span><br></pre></td></tr></table></figure><a id="more"></a><h2 id="括号和大括号"><a href="#括号和大括号" class="headerlink" title="括号和大括号"></a>括号和大括号</h2><p><code>()</code> 包裹的代码在子shell 里执行,<code>{}</code> 包含的代码在当前shell里执行<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">➜ (a=<span class="variable">$PWD</span>;<span class="built_in">echo</span> <span class="variable">$a</span>;)</span><br><span class="line">/Users/lin</span><br><span class="line">➜ <span class="built_in">echo</span> <span class="variable">$a</span> <span class="comment"># a is not defined in current shell</span></span><br><span class="line"></span><br><span class="line">➜ { a=<span class="variable">$PWD</span>;<span class="built_in">echo</span> <span class="variable">$a</span>; }</span><br><span class="line">/Users/lin</span><br><span class="line">➜ <span class="built_in">echo</span> <span class="variable">$a</span></span><br><span class="line">/Users/lin</span><br></pre></td></tr></table></figure></p><h2 id="echo-expression"><a href="#echo-expression" class="headerlink" title="echo $((expression))"></a>echo $((expression))</h2><p>运算展开<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">➜ <span class="built_in">echo</span> $((1+2))</span><br><span class="line">3</span><br></pre></td></tr></table></figure></p><p>进制</p><table><thead><tr><th>写法</th><th>含义 </th></tr></thead><tbody><tr><td><code>0</code>开头</td><td>8进制</td></tr><tr><td><code>0x</code>开头</td><td>16进制</td></tr><tr><td><code>[base#]n</code></td><td>base进制,n is a number in that base</td></tr></tbody></table><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">➜ <span class="built_in">echo</span> $((1))</span><br><span class="line">1</span><br><span class="line"></span><br><span class="line">➜ <span class="built_in">echo</span> $((2<span class="comment">#11))</span></span><br><span class="line">3</span><br><span class="line"></span><br><span class="line">➜ <span class="built_in">echo</span> $((2<span class="comment">#3))</span></span><br><span class="line">zsh: bad math expression: operator expected at `3<span class="string">'</span></span><br></pre></td></tr></table></figure><h2 id="单引号和双引号"><a href="#单引号和双引号" class="headerlink" title="单引号和双引号"></a>单引号和双引号</h2><p>被双引号括起的内容常量还是常量,变量则会替换成变量内容。<br>被单引号括起的内容不会发生替换。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">➜ var=dablelv</span><br><span class="line">➜ echo '$var'</span><br><span class="line">$var</span><br><span class="line">➜ echo "$var"</span><br><span class="line">dablelv</span><br></pre></td></tr></table></figure><h2 id="To-be-continued"><a href="#To-be-continued" class="headerlink" title="To be continued."></a>To be continued.</h2>]]></content>
<categories>
<category> linux </category>
</categories>
<tags>
<tag> shell </tag>
</tags>
</entry>
<entry>
<title>typedef详解</title>
<link href="/2017/05/11/typedef%E8%AF%A6%E8%A7%A3/"/>
<url>/2017/05/11/typedef%E8%AF%A6%E8%A7%A3/</url>
<content type="html"><![CDATA[<p>一行很常用的代码:<br><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">typedef</span> <span class="keyword">int</span> XX_Size_Check[(<span class="keyword">sizeof</span>(XX)==<span class="number">64</span>)? <span class="number">1</span>:<span class="number">-1</span>];</span><br></pre></td></tr></table></figure></p><p>很容易猜到上面这行代码是要在编译时检查XX的size,但再深究点,我们就会发现它跟我们平时typedef的写法不太一致。<br><a id="more"></a></p><h1 id="typedef用法小结"><a href="#typedef用法小结" class="headerlink" title="typedef用法小结"></a>typedef用法小结</h1><h2 id="对已有类型定义别名"><a href="#对已有类型定义别名" class="headerlink" title="对已有类型定义别名"></a>对已有类型定义别名</h2><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">typedef</span> <old type name> <<span class="keyword">new</span> alias>;</span><br></pre></td></tr></table></figure><p>这是最常见的写法,主要用途有</p><ul><li>结构体</li></ul><p>举个例子,我们这里定义了一个结构体MyStruct,在C里面,如果要定义该类型的变量,则需要写struct关键字。(C++里在不产生歧义的情况下可以省略。)</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">MyStruct</span> {</span></span><br><span class="line"> <span class="keyword">int</span> data1;</span><br><span class="line"> <span class="keyword">char</span> data2;</span><br><span class="line">};</span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">MyStruct</span> <span class="title">a</span>;</span></span><br></pre></td></tr></table></figure><p>我们可以使用typedef来简化书写:</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">typedef</span> <span class="class"><span class="keyword">struct</span> <span class="title">MyStruct</span> <span class="title">newtype</span>;</span></span><br><span class="line"></span><br><span class="line">newtype a;</span><br></pre></td></tr></table></figure><p>当然也可以直接写成这样:</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">typedef</span> <span class="class"><span class="keyword">struct</span> <span class="title">MyStruct</span> {</span></span><br><span class="line"> <span class="keyword">int</span> data1;</span><br><span class="line"> <span class="keyword">char</span> data2;</span><br><span class="line">} newtype;</span><br></pre></td></tr></table></figure><p>或者更简单的:<br><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">typedef</span> <span class="class"><span class="keyword">struct</span> {</span></span><br><span class="line"> <span class="keyword">int</span> data1;</span><br><span class="line"> <span class="keyword">char</span> data2;</span><br><span class="line">} newtype;</span><br></pre></td></tr></table></figure></p><ul><li>指针</li></ul><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">typedef</span> <span class="class"><span class="keyword">struct</span> <span class="title">Node</span>* <span class="title">NodePtr</span>;</span></span><br><span class="line">...</span><br><span class="line">NodePtr startptr, endptr, curptr, prevptr, errptr, refptr;</span><br></pre></td></tr></table></figure><h2 id="函数指针"><a href="#函数指针" class="headerlink" title="函数指针"></a>函数指针</h2><p>不使用typedef,我们会这样写:<br><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">do_math</span><span class="params">(<span class="keyword">float</span> arg1, <span class="keyword">int</span> arg2)</span> </span>{</span><br><span class="line"> <span class="keyword">return</span> arg2;</span><br><span class="line">}</span><br><span class="line"> </span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">call_a_func</span><span class="params">(<span class="keyword">int</span> (*call_this)(<span class="keyword">float</span>, <span class="keyword">int</span>))</span> </span>{</span><br><span class="line"> <span class="keyword">int</span> output = call_this(<span class="number">5.5</span>, <span class="number">7</span>);</span><br><span class="line"> <span class="keyword">return</span> output;</span><br><span class="line">}</span><br><span class="line"> </span><br><span class="line"><span class="keyword">int</span> final_result = call_a_func(&do_math);</span><br></pre></td></tr></table></figure></p><p>使用typedef:<br><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">typedef</span> <span class="title">int</span> <span class="params">(*MathFunc)</span><span class="params">(<span class="keyword">float</span>, <span class="keyword">int</span>)</span></span>;</span><br><span class="line"> </span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">do_math</span><span class="params">(<span class="keyword">float</span> arg1, <span class="keyword">int</span> arg2)</span> </span>{</span><br><span class="line"> <span class="keyword">return</span> arg2;</span><br><span class="line">}</span><br><span class="line"> </span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">call_a_func</span><span class="params">(MathFunc call_this)</span> </span>{</span><br><span class="line"> <span class="keyword">int</span> output = call_this(<span class="number">5.5</span>, <span class="number">7</span>);</span><br><span class="line"> <span class="keyword">return</span> output;</span><br><span class="line">}</span><br><span class="line"> </span><br><span class="line"><span class="keyword">int</span> final_result = call_a_func(&do_math);</span><br></pre></td></tr></table></figure></p><p>这里typedef后面跟了一个函数指针类型 int (*MathFunc)(float, int),通过这个语句,MathFunc成为该函数指针类型的别名。</p><h2 id="数组"><a href="#数组" class="headerlink" title="数组"></a>数组</h2><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">typedef</span> <span class="keyword">int</span> <span class="built_in">vector</span>[<span class="number">10</span>];</span><br><span class="line"></span><br><span class="line"><span class="built_in">vector</span> a;</span><br><span class="line">a[<span class="number">9</span>] = <span class="number">100</span>;</span><br></pre></td></tr></table></figure><p>和函数指针比较类似,typedef后面跟了一个数组类型(元素类型为int,数组长度为10),通过这个语句,vector成为该数组类型的别名。<br>也可以定义多维数组。</p><h3 id="参考:"><a href="#参考:" class="headerlink" title="参考:"></a>参考:</h3><p><a href="http://en.wikipedia.org/wiki/Typedef" target="_blank" rel="noopener">Wikipedia: typedef</a></p><p><a href="http://www.cnblogs.com/Jason-Damon/archive/2011/10/23/2222119.html" target="_blank" rel="noopener">Jason Damon: 使用typedef语句定义数组类型</a></p>]]></content>
<categories>
<category> C/C++ </category>
</categories>
<tags>
<tag> typedef </tag>
</tags>
</entry>
<entry>
<title>hexo搭建博客全记录</title>
<link href="/2017/04/18/hexo%E6%90%AD%E5%BB%BA%E5%8D%9A%E5%AE%A2%E5%85%A8%E8%AE%B0%E5%BD%95/"/>
<url>/2017/04/18/hexo%E6%90%AD%E5%BB%BA%E5%8D%9A%E5%AE%A2%E5%85%A8%E8%AE%B0%E5%BD%95/</url>
<content type="html"><![CDATA[<h1 id="why-hexo"><a href="#why-hexo" class="headerlink" title="why hexo"></a>why hexo</h1><p>曾经尝试过用github pages搭博客,用的是<a href="http://isnowfy.github.io/about-simple-cn.html" target="_blank" rel="noopener">isnowfy</a>提供的框架,但是有几个缺点:</p><ul><li>发文章必须用它提供的框架,且需要将Github用户名和密码告诉它</li><li>网站样式不好看,懒癌又不会自己调整</li><li>网站自定义的维度比较小</li></ul><p>最近看了几个用hexo搭的博客,功能基本满足我的需求,且颜值高,就果断折腾一波,我用的是Mac 。参考:</p><ul><li><a href="http://www.ezlippi.com/" target="_blank" rel="noopener">EZLippi-浮生志</a></li><li><a href="https://hexo.io/" target="_blank" rel="noopener">hexo官网</a></li><li><a href="http://theme-next.iissnan.com/" target="_blank" rel="noopener">NexT主题官网</a><a id="more"></a><h1 id="基础"><a href="#基础" class="headerlink" title="基础"></a>基础</h1>基础操作参考官网文档即可,<a href="http://www.jianshu.com/p/4eaddcbe4d12" target="_blank" rel="noopener">5分钟搭建免费个人博客 - dimsky</a> 这个比较简洁。</li></ul><h2 id="node安装慢"><a href="#node安装慢" class="headerlink" title="node安装慢"></a>node安装慢</h2><p>推荐安装nvm,然后用它装node;node国内下载超级慢,得用镜像。<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">export</span> NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node</span><br></pre></td></tr></table></figure></p><p>将这行配置加到你的shell的配置文件如<em>.zshrc</em>里,然后<code>source ~/.zshrc</code>。</p><p>另附上npm的国内镜像:<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"># 编辑 ~/.npmrc 加入下面内容</span><br><span class="line">registry = https://registry.npm.taobao.org</span><br></pre></td></tr></table></figure></p><h2 id="安装主题"><a href="#安装主题" class="headerlink" title="安装主题"></a>安装主题</h2><p>比如NexT<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">cd username.github.io</span><br><span class="line">git clone https://github.com/iissnan/hexo-theme-next themes/next</span><br></pre></td></tr></table></figure></p><h2 id="站点配置"><a href="#站点配置" class="headerlink" title="站点配置"></a>站点配置</h2><p>路径:username.github.io/<code>_config.yml</code>,参考:<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">title: dimsky 的 9 维空间 //你博客的名字</span><br><span class="line">author: dimsky //你的名字</span><br><span class="line">language: zh-Hans //语言 中文</span><br><span class="line">theme: next //刚刚安装的主题名称</span><br><span class="line">deploy:</span><br><span class="line"> type: git //使用Git 发布</span><br><span class="line"> repo: https://github.com/username/username.github.io.git // 刚创建的Github仓库</span><br></pre></td></tr></table></figure></p><h2 id="主题配置"><a href="#主题配置" class="headerlink" title="主题配置"></a>主题配置</h2><p>路径:username.github.io<code>/themes/next/_config.yml</code>,参考:<a href="http://theme-next.iissnan.com/getting-started.html#theme-settings" target="_blank" rel="noopener">主题设定 - NexT</a></p><h2 id="命令汇总:"><a href="#命令汇总:" class="headerlink" title="命令汇总:"></a>命令汇总:</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># nvm安装</span></span><br><span class="line">curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | sh</span><br><span class="line"><span class="comment"># nvm使用</span></span><br><span class="line">nvm ls-remote</span><br><span class="line">nvm ls</span><br><span class="line">nvm install stable</span><br><span class="line">nvm install 7 <span class="comment"># 会自动装7的最新版本</span></span><br><span class="line"><span class="comment"># nvm use</span></span><br><span class="line">nvm use 7.9.0</span><br><span class="line">nvm use system</span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># hexo安装</span></span><br><span class="line">npm install hexo-cli -g</span><br><span class="line">hexo init username.github.io</span><br><span class="line"><span class="built_in">cd</span> username.github.io</span><br><span class="line">npm install</span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 写文章</span></span><br><span class="line">hexo new [layout] <title></span><br><span class="line"><span class="comment"># 启动本地服务</span></span><br><span class="line">hexo s</span><br><span class="line"><span class="comment"># 安装hexo-deployer-git</span></span><br><span class="line">npm install hexo-deployer-git --save</span><br><span class="line"><span class="comment"># 清理缓存db.json和生成文件(public),generate,deploy</span></span><br><span class="line">hexo clean && hexo g && hexo d</span><br></pre></td></tr></table></figure><h1 id="进阶"><a href="#进阶" class="headerlink" title="进阶"></a>进阶</h1><h2 id="主题配置-1"><a href="#主题配置-1" class="headerlink" title="主题配置"></a>主题配置</h2><ul><li>添加tags,categories,about页面</li><li>侧边栏社交链接</li><li>设置友情链接</li></ul><p>参考:<a href="http://theme-next.iissnan.com/theme-settings.html" target="_blank" rel="noopener">主题配置 - NexT</a></p><h2 id="站内搜索"><a href="#站内搜索" class="headerlink" title="站内搜索"></a>站内搜索</h2><p><a href="http://theme-next.iissnan.com/third-party-services.html#local-search" target="_blank" rel="noopener">Local Search - NexT</a><br><a href="http://www.ezlippi.com/blog/2017/02/hexo-search.html" target="_blank" rel="noopener">Hexo博客添加站内搜索 - EZLippi</a><br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># npm install hexo-generator-search --save ?</span></span><br><span class="line">npm install hexo-generator-searchdb --save</span><br></pre></td></tr></table></figure></p><p>向站点配置文件添加<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">search:</span><br><span class="line"> path: search.xml</span><br><span class="line"> field: post</span><br><span class="line"> format: html</span><br><span class="line"> limit: 10000</span><br></pre></td></tr></table></figure></p><p>编辑主题配置文件,启用本地搜索功能:<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">local_search:</span><br><span class="line"> enable: true</span><br></pre></td></tr></table></figure></p><p>注意缩进。</p><h2 id="站点地图"><a href="#站点地图" class="headerlink" title="站点地图"></a>站点地图</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install hexo-generator-seo-friendly-sitemap --save</span><br></pre></td></tr></table></figure><p>向站点配置文件添加<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">sitemap:</span><br><span class="line"> path: sitemap.xml</span><br></pre></td></tr></table></figure></p><h2 id="返回顶部"><a href="#返回顶部" class="headerlink" title="返回顶部"></a>返回顶部</h2><p>参考:<a href="http://wuchong.me/blog/2014/01/08/hexo-scrollup/" target="_blank" rel="noopener">Hexo博客优化:添加返回顶部功能 - Jark</a>,备个份。</p><ol><li><p>新建文件 username.github.io<code>/themes/next/layout/_partials/totop.ejs</code>,在文件中加入HTML代码:</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag"><<span class="name">div</span> <span class="attr">id</span>=<span class="string">"totop"</span> <span class="attr">style</span>=<span class="string">"position:fixed;bottom:150px;right:50px;cursor: pointer;"</span>></span></span><br><span class="line"><span class="tag"><<span class="name">a</span> <span class="attr">title</span>=<span class="string">"返回顶部"</span>></span><span class="tag"><<span class="name">img</span> <span class="attr">src</span>=<span class="string">"/imgs/scrollup.png"</span>/></span><span class="tag"></<span class="name">a</span>></span></span><br><span class="line"><span class="tag"></<span class="name">div</span>></span></span><br><span class="line"><span class="comment"><!--文件引用--></span></span><br><span class="line"><span class="tag"><<span class="name">%-</span> <span class="attr">partial</span>('<span class="attr">totop</span>') %></span></span><br><span class="line"><span class="tag"><<span class="name">script</span> <span class="attr">src</span>=<span class="string">"<%- config.root %>js/totop.js"</span>></span><span class="tag"></<span class="name">script</span>></span></span><br></pre></td></tr></table></figure></li><li><p>新建文件 username.github.io<code>/themes/next/source/js/totop.js</code>,在文件中添加javascript代码:</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line">(<span class="function"><span class="keyword">function</span>(<span class="params">$</span>) </span>{ </span><br><span class="line"><span class="comment">// When to show the scroll link</span></span><br><span class="line"><span class="comment">// higher number = scroll link appears further down the page </span></span><br><span class="line"><span class="keyword">var</span> upperLimit = <span class="number">1000</span>;</span><br><span class="line"></span><br><span class="line"><span class="comment">// Our scroll link element</span></span><br><span class="line"><span class="keyword">var</span> scrollElem = $(<span class="string">'#totop'</span>);</span><br><span class="line"> </span><br><span class="line"><span class="comment">// Scroll to top speed</span></span><br><span class="line"><span class="keyword">var</span> scrollSpeed = <span class="number">500</span>;</span><br><span class="line"> </span><br><span class="line"><span class="comment">// Show and hide the scroll to top link based on scroll position </span></span><br><span class="line">scrollElem.hide();</span><br><span class="line">$(<span class="built_in">window</span>).scroll(<span class="function"><span class="keyword">function</span> (<span class="params"></span>) </span>{ </span><br><span class="line"><span class="keyword">var</span> scrollTop = $(<span class="built_in">document</span>).scrollTop(); </span><br><span class="line"><span class="keyword">if</span> ( scrollTop > upperLimit ) {</span><br><span class="line">$(scrollElem).stop().fadeTo(<span class="number">300</span>, <span class="number">1</span>); <span class="comment">// fade back in </span></span><br><span class="line">}<span class="keyword">else</span>{ </span><br><span class="line">$(scrollElem).stop().fadeTo(<span class="number">300</span>, <span class="number">0</span>); <span class="comment">// fade out</span></span><br><span class="line">}</span><br><span class="line">});</span><br><span class="line"><span class="comment">// Scroll to top animation on click</span></span><br><span class="line">$(scrollElem).click(<span class="function"><span class="keyword">function</span>(<span class="params"></span>)</span>{</span><br><span class="line">$(<span class="string">'html, body'</span>).animate({<span class="attr">scrollTop</span>:<span class="number">0</span>}, scrollSpeed); <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line">});</span><br><span class="line">})(jQuery);</span><br><span class="line"><span class="comment">// 如果对显示位置和回滚速度不满意,修改以上代码的upperLimit和scrollSpeed参数即可。</span></span><br></pre></td></tr></table></figure></li><li><p>添加按钮图片。将下图复制到 username.github.io<code>/themes/next/source/imgs</code> 目录下,文件名为<code>scrollup.png</code><br><img src="/images/scrollup.png" alt="scrollup.png"></p></li></ol><h1 id="TODO"><a href="#TODO" class="headerlink" title="TODO"></a>TODO</h1><ul><li><strong>评论区</strong> 多说快关闭了,需要考察下用什么</li><li><strong>博客迁移</strong> </li></ul>]]></content>
<categories>
<category> 杂 </category>
</categories>
<tags>
<tag> hexo </tag>
</tags>
</entry>
</search>