{"id":702,"date":"2020-04-01T22:32:23","date_gmt":"2020-04-01T14:32:23","guid":{"rendered":"http:\/\/kylelv.com\/?p=702"},"modified":"2020-04-01T23:12:09","modified_gmt":"2020-04-01T15:12:09","slug":"a%e9%ab%98%e9%98%b6%e5%87%bd%e6%95%b0fx-c11","status":"publish","type":"post","link":"https:\/\/blog.kylelv.com\/?p=702","title":{"rendered":"\u7a0b\u5e8f\u8bbe\u8ba1\u5b9e\u4e60\u4e4bC++11\u53ca\u9ad8\u7ea7\u7279\u6027\u4f5c\u4e1a"},"content":{"rendered":"\n<h2 class=\"has-text-align-center wp-block-heading\">A:\u9ad8\u9636\u51fd\u6570F(x)<\/h2>\n\n\n\n<p class=\"has-text-align-center\">\u603b\u65f6\u95f4\u9650\u5236:&nbsp;1000ms&nbsp;\u5185\u5b58\u9650\u5236:&nbsp;65536kB<\/p>\n\n\n\n<p>\u63cf\u8ff0<\/p>\n\n\n\n<p>lisp\u8bed\u8a00\u4e2d\u6709\u9ad8\u9636\u51fd\u6570\u7684\u6982\u5ff5\uff0c\u5373\u51fd\u6570\u53ef\u4ee5\u4f5c\u4e3a\u51fd\u6570\u7684\u53c2\u6570\uff0c\u4e5f\u53ef\u4ee5\u4f5c\u4e3a\u51fd\u6570\u7684\u8fd4\u56de\u503c\u3002\u4f8b\u5982:<\/p>\n\n\n\n<p>(define (f n)&nbsp;&nbsp; (lambda (x) (+ x n)))<\/p>\n\n\n\n<p>\u5b9a\u4e49\u4e86\u4e00\u4e2a\u51fd\u6570f\uff0c\u8be5\u51fd\u6570\u7684\u8fd4\u56de\u503c\u662f\u53e6\u4e00\u4e2a\u51fd\u6570\uff0c\u5047\u5b9a\u79f0\u4e3ag\u5373 (lambda (x) (+ x n) \u6b64\u51fd\u6570\u529f\u80fd\u662f\u53c2\u6570\u4e3ax\uff0c\u8fd4\u56de\u503c\u4e3ax + n\u3002 \u4e8e\u662f ((f 7) 9)&nbsp;&nbsp; \u5982\u4e0b\u6267\u884c<\/p>\n\n\n\n<p>(f 7)\u4ee5\u53c2\u65707\u8c03\u7528f, f\u7684\u8fd4\u56de\u503c\u662fg,n\u7684\u503c\u4e3a7<\/p>\n\n\n\n<p>((f 7) 9)\u7b49\u4ef7\u4e8e (g 9)\uff0c\u5373\u4ee5\u53c2\u65709\u8c03\u7528g\u3002 \u56e0 n = 7, x = 9 ,\u56e0\u6b64(g 9)\u8fd4\u56de\u503c\u4e3a16<\/p>\n\n\n\n<p>\u7f16\u5199\u4e00\u4e2aC++\u7684\u901a\u7528\u51fd\u6570\u6a21\u677ff,\u4f7f\u4e4b\u80fd\u5b8c\u6210\u7c7b\u4f3c\u4e8elisp\u51fd\u6570f\u7684\u529f\u80fd\u3002 \u5bf9\u4e8e\u4e0b\u9762\u7684\u7a0b\u5e8f\uff0c\u8f93\u51fa\u7ed3\u679c\u662f<\/p>\n\n\n\n<p>16<br>world hello!<br>world!<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">#include &lt;iostream&gt;\nusing namespace std;<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">\/\/ \u5728\u6b64\u5904\u8865\u5145\u4f60\u7684\u4ee3\u7801<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">int main()\n{\n   cout &lt;&lt; f&lt;int,int&gt;(7)(9) &lt;&lt; endl;   \/\/16\n   cout &lt;&lt; f&lt;string,string&gt; (\" hello!\")(\"world\")  &lt;&lt;endl; \/\/ world hello!\n   cout &lt;&lt; f&lt;char,string&gt; ('!')(\"world\") &lt;&lt; endl;\n   \n   \n   return 0;    \/\/world!\n}<\/pre>\n\n\n\n<p>\u8f93\u5165<\/p>\n\n\n\n<p>\u65e0<\/p>\n\n\n\n<p>\u8f93\u51fa<\/p>\n\n\n\n<p>16<br>world hello!<br>world!<\/p>\n\n\n\n<p>\u6837\u4f8b\u8f93\u5165<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\u65e0<\/pre>\n\n\n\n<p>\u6837\u4f8b\u8f93\u51fa<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">16\nworld hello!\nworld!\n<\/pre>\n\n\n\n<p>\u63d0\u793aC++\u51fd\u6570\u6a21\u677f\u5b9e\u4f8b\u5316\u65f6\uff0c\u4e5f\u53ef\u4ee5\u901a\u8fc7\u5728&lt;&gt;\u4e2d\u6307\u5b9a\u7c7b\u578b\u53c2\u6570\u6240\u5bf9\u5e94\u7684\u5177\u4f53\u7c7b\u578b\u6765\u5b9e\u73b0\u3002<\/p>\n\n\n\n<p>\u6765\u6e90Guo Wei<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;iostream>\nusing namespace std;\ntemplate&lt;class T1,class T2>\nclass f{\n    T1 a;\npublic:\n    f(T1 x):a(x){}\n    T2 operator ()(T2 b){\n        return b+a;\n    }\n};\n\/\/ \u5728\u6b64\u5904\u8865\u5145\u4f60\u7684\u4ee3\u7801\nint main()\n{\n   cout &lt;&lt; f&lt;int,int>(7)(9) &lt;&lt; endl;   \/\/16\n   cout &lt;&lt; f&lt;string,string> (\" hello!\")(\"world\")  &lt;&lt;endl; \/\/ world hello!\n   cout &lt;&lt; f&lt;char,string> ('!')(\"world\") &lt;&lt; endl;\n   \n   \n   return 0;    \/\/world!\n}\n<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"has-text-align-center wp-block-heading\">B:\u9ad8\u9636\u51fd\u6570Combine<\/h2>\n\n\n\n<p class=\"has-text-align-center\">\u603b\u65f6\u95f4\u9650\u5236:&nbsp;1000ms&nbsp;\u5185\u5b58\u9650\u5236:&nbsp;65536kB<\/p>\n\n\n\n<p>\u63cf\u8ff0<\/p>\n\n\n\n<p>Lisp\u8bed\u8a00\u4e2d\u6709\u9ad8\u9636\u51fd\u6570\u7684\u6982\u5ff5\uff0c\u5373\u51fd\u6570\u53ef\u4ee5\u4f5c\u4e3a\u51fd\u6570\u7684\u53c2\u6570\uff0c\u4e5f\u53ef\u4ee5\u4f5c\u4e3a\u51fd\u6570\u7684\u8fd4\u56de\u503c\u3002\u4f8b\u5982:<\/p>\n\n\n\n<p>(define (square x)&nbsp;&nbsp;(* xx))&nbsp;&nbsp; \u5b9a\u4e49\u4e86\u4e00\u4e2a\u6c42x\u7684\u5e73\u65b9\u7684\u51fd\u6570<\/p>\n\n\n\n<p>(define (inc x)&nbsp;&nbsp;(+ x1))&nbsp;&nbsp;&nbsp;&nbsp; \u5b9a\u4e49\u4e86\u4e00\u4e2a\u6c42x+1\u7684\u51fd\u6570<\/p>\n\n\n\n<p>(define (combine f g) &nbsp;&nbsp;&nbsp;&nbsp; (lambda (x) (f (+ (fx) (g x)))))<\/p>\n\n\n\n<p>(combine f g) \u8fd4\u56de\u51fd\u6570k , k(x) = f( f(x)+g(x))<\/p>\n\n\n\n<p>\u56e0\u6b64 ((combine square inc) 3) \u7684\u8fd4\u56de\u503c\u5c31\u662f169<\/p>\n\n\n\n<p>\u6b64\u5904<\/p>\n\n\n\n<p>f(x) = x*x &nbsp;&nbsp;&nbsp;&nbsp; g(x) = x + 1<\/p>\n\n\n\n<p>k(x) = (x*x+(x+1)) ^2<\/p>\n\n\n\n<p>((combine square inc) 3) \u5373\u662f k(3)<\/p>\n\n\n\n<p>\u56e0\u6b64\u8fd4\u56de\u503c\u4e3a169 \u7528C++\u5b9e\u73b0\u7c7b\u4f3c\u7684combine\u51fd\u6570\u6a21\u677f\uff0c\u4f7f\u5f97\u4e0b\u9762\u7684\u7a0b\u5e8f\u8f93\u51fa\u7ed3\u679c\u4e3a<\/p>\n\n\n\n<p>169<br>10.75<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">#include &lt;iostream&gt;\nusing namespace std;<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">\/\/ \u5728\u6b64\u5904\u8865\u5145\u4f60\u7684\u4ee3\u7801<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">int main()\n{\n    auto Square = [] (double a) { return a * a; };\n    auto Inc = [] (double a) { return a + 1; };\n    cout &lt;&lt; combine&lt;decltype(Square),decltype(Inc),int&gt;(Square,Inc)(3) &lt;&lt; endl;\n    cout &lt;&lt; combine&lt;decltype(Inc),decltype(Square),double&gt;(Inc,Square)(2.5) &lt;&lt; endl;\n\n    return 0;\n}<\/pre>\n\n\n\n<p>\u8f93\u5165<\/p>\n\n\n\n<p>\u65e0<\/p>\n\n\n\n<p>\u8f93\u51fa<\/p>\n\n\n\n<p>169<br>10.75<\/p>\n\n\n\n<p>\u6837\u4f8b\u8f93\u5165<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\u65e0<\/pre>\n\n\n\n<p>\u6837\u4f8b\u8f93\u51fa<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">169\n10.75\n<\/pre>\n\n\n\n<p>\u63d0\u793aC++\u51fd\u6570\u6a21\u677f\u5b9e\u4f8b\u5316\u65f6\uff0c\u4e5f\u53ef\u4ee5\u901a\u8fc7\u5728&lt;&gt;\u4e2d\u6307\u5b9a\u7c7b\u578b\u53c2\u6570\u6240\u5bf9\u5e94\u7684\u5177\u4f53\u7c7b\u578b\u6765\u5b9e\u73b0\u3002<\/p>\n\n\n\n<p>\u6765\u6e90Guo Wei<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;iostream>\nusing namespace std;\ntemplate&lt;class T1,class T2,class T3>\nclass combine{\n\tT1 f;\n\tT2 g;\npublic:\n\tcombine(T1 a,T2 b):f(a),g(b){}\n\tT3 operator ()(T3 x){\n\t\treturn f(f(x)+g(x));\n\t}\n};\n\/\/ \u5728\u6b64\u5904\u8865\u5145\u4f60\u7684\u4ee3\u7801\nint main()\n{\n    auto Square = &#91;] (double a) { return a * a; };\n    auto Inc = &#91;] (double a) { return a + 1; };\n    cout &lt;&lt; combine&lt;decltype(Square),decltype(Inc),int>(Square,Inc)(3) &lt;&lt; endl;\n    cout &lt;&lt; combine&lt;decltype(Inc),decltype(Square),double>(Inc,Square)(2.5) &lt;&lt; endl;\n\n    return 0;\n}\n<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"has-text-align-center wp-block-heading\">C:\u81ea\u5df1\u5b9e\u73b0bitset<\/h2>\n\n\n\n<p class=\"has-text-align-center\">\u603b\u65f6\u95f4\u9650\u5236:\u00a01000ms\u00a0\u5185\u5b58\u9650\u5236:\u00a065536kB<\/p>\n\n\n\n<p>\u63cf\u8ff0<\/p>\n\n\n\n<p>\u7a0b\u5e8f\u586b\u7a7a\uff0c\u5b9e\u73b0\u4e00\u4e2a\u7c7b\u4f3cSTL bitset\u7684 MyBitset, \u8f93\u51fa\u6307\u5b9a\u7ed3\u679c<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">#include &lt;iostream&gt;\n#include &lt;cstring&gt;\nusing namespace std;\ntemplate &lt;int bitNum&gt;\nstruct MyBitset \n{\n\tchar a[bitNum\/8+1];\n\tMyBitset() { memset(a,0,sizeof(a));};\n\tvoid Set(int i,int v) {\n\t\tchar &amp; c = a[i\/8];\n\t\tint bp = i % 8;\n\t\tif( v ) \n\t\t\tc |= (1 &lt;&lt; bp);\n\t\telse \n\t\t\tc &amp;= ~(1 &lt;&lt; bp);\n\t}<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">\/\/ \u5728\u6b64\u5904\u8865\u5145\u4f60\u7684\u4ee3\u7801<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">void Print() {\n\t\tfor(int i = 0;i &lt; bitNum; ++i) \n\t\t\tcout &lt;&lt; (*this) [i];\n\t\tcout &lt;&lt; endl;\n\t}\n\n};\n\nint main()\n{\n\tint n;\n\tint i,j,k,v;\n\twhile( cin &gt;&gt;  n) {\n\t\tMyBitset&lt;20&gt; bs;\n\t\tfor(int i = 0;i &lt; n; ++i) {\n\t\t\tint t;\n\t\t\tcin &gt;&gt; t;\n\t\t\tbs.Set(t,1);\n\t\t}\n\t\tbs.Print();\n\t\tcin &gt;&gt; i &gt;&gt; j &gt;&gt; k &gt;&gt; v;\n\t\tbs[k] = v;\n\t\tbs[i] = bs[j] = bs[k];\n\t\tbs.Print();\n\t\tcin &gt;&gt; i &gt;&gt; j &gt;&gt; k &gt;&gt; v;\n\t\tbs[k] = v;\n\t\t(bs[i] = bs[j]) = bs[k];\n\t\tbs.Print();\n\t}\n\treturn 0;\n}<\/pre>\n\n\n\n<p>\u8f93\u5165<\/p>\n\n\n\n<p>\u591a\u7ec4\u6570\u636e<br>\u6bcf\u7ec4\u6570\u636e\uff1a<br>\u7b2c\u4e00\u884c\u662f\u6574\u6570 n , 1 &lt;= n &lt; 20;<br>\u7b2c\u4e8c\u884c\u662fn\u4e2a\u6574\u6570 k1,k2&#8230; kn,\u5747\u5728\u8303\u56f4 [0,19]\u5185\u3002<br>\u7b2c\u4e09\u884c\u662f \u56db\u4e2a\u6574\u6570 i1,j1,k1,v1 \u3002 0 &lt;= i1,j1,k1 &lt;= 19, v1\u503c\u4e3a0\u62161<br>\u7b2c\u4e09\u884c\u662f \u56db\u4e2a\u6574\u6570 i2,j2,k2,v2 \u3002 0 &lt;= i2,j2,k2 &lt;= 19, v2\u503c\u4e3a0\u62161<\/p>\n\n\n\n<p>\u8f93\u51fa<\/p>\n\n\n\n<p>\u5bf9\u6bcf\u7ec4\u6570\u636e\uff0c\u5171\u8f93\u51fa3\u884c\uff0c\u6bcf\u884c20\u4f4d\uff0c\u6bcf\u4f4d\u4e3a1\u6216\u80050\u3002\u6700\u5de6\u8fb9\u79f0\u4e3a\u7b2c0\u4f4d<br>\u7b2c\u4e00\u884c\uff1a \u7b2c k1,k2 &#8230; kn\u4f4d\u4e3a1\uff0c\u5176\u4f59\u4f4d\u4e3a0\u3002<br>\u7b2c\u4e8c\u884c\uff1a \u5c06\u7b2c\u4e00\u884c\u4e2d\u7684\u7b2c i1,j1,k1\u4f4d\u53d8\u4e3a v1,\u5176\u4f59\u4f4d\u4e0d\u53d8<br>\u7b2c\u4e09\u884c\uff1a \u5c06\u7b2c\u4e8c\u884c\u4e2d\u7684\u7b2ci2\u4f4d\u548ck2\u4f4d\u53d8\u4e3av2\uff0c\u5176\u4f59\u4f4d\u4e0d\u53d8<\/p>\n\n\n\n<p>\u6837\u4f8b\u8f93\u5165<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">4\n0 1 2 8\n7 19 0 1\n7 2 8 0\n1\n1\n1 1 1 0\n1 1 1 1\n<\/pre>\n\n\n\n<p>\u6837\u4f8b\u8f93\u51fa<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">11100000100000000000\n11100001100000000001\n11100000000000000001\n01000000000000000000\n00000000000000000000\n01000000000000000000\n<\/pre>\n\n\n\n<p>\u63d0\u793a\u63a8\u8350\u4f7f\u7528\u5185\u90e8\u7c7b\uff0c\u5185\u90e8\u7c7b\u4e2d\u4f7f\u7528\u5f15\u7528\u6210\u5458\u3002\u5f15\u7528\u6210\u5458\u8981\u5728\u6784\u9020\u51fd\u6570\u4e2d\u521d\u59cb\u5316\u3002<\/p>\n\n\n\n<p>\u6765\u6e90Guo Wei<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;iostream>\n#include &lt;cstring>\nusing namespace std;\ntemplate &lt;int bitNum>\nstruct MyBitset \n{\n\tchar a&#91;bitNum\/8+1];\n\tMyBitset() { memset(a,0,sizeof(a));};\n\tvoid Set(int i,int v) {\n\t\tchar &amp; c = a&#91;i\/8];\n\t\tint bp = i % 8;\n\t\tif( v ) \n\t\t\tc |= (1 &lt;&lt; bp);\n\t\telse \n\t\t\tc &amp;= ~(1 &lt;&lt; bp);\n\t}\n\tstruct qaz{\n\t\tint t&#91;bitNum+1];\n\t\tqaz(){memset(t,0,sizeof(t));}\n\t\tvoid fresh(char *a){\n\t\t\tfor(int i=0;i&lt;bitNum;++i)\n\t\t\t\tt&#91;i]=(a&#91;i\/8]&amp;(1&lt;&lt;(i%8)))?1:0;\n\t\t}\n\t}p;\n\tbool ff=0;\n\tint&amp; operator &#91;](int x){\n\t\tif(!ff) p.fresh(a),ff=1;\n\t\treturn p.t&#91;x];\n\t}\n\/\/ \u5728\u6b64\u5904\u8865\u5145\u4f60\u7684\u4ee3\u7801\nvoid Print() {\n\t\tfor(int i = 0;i &lt; bitNum; ++i) \n\t\t\tcout &lt;&lt; (*this) &#91;i];\n\t\tcout &lt;&lt; endl;\n\t}\n\n};\n\nint main()\n{\n\tint n;\n\tint i,j,k,v;\n\twhile( cin >>  n) {\n\t\tMyBitset&lt;20> bs;\n\t\tfor(int i = 0;i &lt; n; ++i) {\n\t\t\tint t;\n\t\t\tcin >> t;\n\t\t\tbs.Set(t,1);\n\t\t}\n\t\tbs.Print();\n\t\tcin >> i >> j >> k >> v;\n\t\tbs&#91;k] = v;\n\t\tbs&#91;i] = bs&#91;j] = bs&#91;k];\n\t\tbs.Print();\n\t\tcin >> i >> j >> k >> v;\n\t\tbs&#91;k] = v;\n\t\t(bs&#91;i] = bs&#91;j]) = bs&#91;k];\n\t\tbs.Print();\n\t}\n\treturn 0;\n}\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>A:\u9ad8\u9636\u51fd\u6570F(x) \u603b\u65f6\u95f4\u9650\u5236:&nbsp;1000ms&nbsp;\u5185\u5b58\u9650\u5236:&nbsp;65536kB \u63cf [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[70],"tags":[],"class_list":["post-702","post","type-post","status-publish","format-standard","hentry","category-70"],"_links":{"self":[{"href":"https:\/\/blog.kylelv.com\/index.php?rest_route=\/wp\/v2\/posts\/702","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.kylelv.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.kylelv.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.kylelv.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.kylelv.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=702"}],"version-history":[{"count":3,"href":"https:\/\/blog.kylelv.com\/index.php?rest_route=\/wp\/v2\/posts\/702\/revisions"}],"predecessor-version":[{"id":707,"href":"https:\/\/blog.kylelv.com\/index.php?rest_route=\/wp\/v2\/posts\/702\/revisions\/707"}],"wp:attachment":[{"href":"https:\/\/blog.kylelv.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=702"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.kylelv.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=702"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.kylelv.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=702"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}