{"id":319,"date":"2018-07-10T14:32:23","date_gmt":"2018-07-10T14:32:23","guid":{"rendered":"https:\/\/www.haoyuan.info\/?p=319"},"modified":"2018-07-10T14:33:12","modified_gmt":"2018-07-10T14:33:12","slug":"319","status":"publish","type":"post","link":"https:\/\/haoyuan.info\/?p=319","title":{"rendered":"C++ \u57fa\u4e8e\u6570\u503c\u7684range-base for"},"content":{"rendered":"<p>C++11\u4ee5\u540e\u652f\u6301range-base for<br \/>\nES6\u4ee5\u540e\uff0cJavaScript\u5728\u4f7f\u7528for\u7684\u65f6\u5019\u53ef\u4ee5\u8fd9\u4e48\u5199:<\/p>\n<pre><code class=\" line-numbers\">const obj = {\n    a:'b',\n    b:'c'\n};\n\nfor(let i of obj) {\n    console.log(i);\n}\n\/* output:\nb\nc\n*\/\n<\/code><\/pre>\n<p>\u800c\u5728C++\u4e2d \u5219\u5199\u6210:<\/p>\n<pre><code class=\" line-numbers\">vector&lt;int&gt;vec;\nvec.push(1);\nvec.push(2)l\nfor(auto i:vec) {\n    cout &lt;&lt; i &lt;&lt; endl;\n}\n\/* output\n1\n2\n*\/\n<\/code><\/pre>\n<p>\u800c\u6211\u4eec\u5728\u6570\u503c\u8303\u56f4\u7684\u5faa\u73af\u7684\u65f6\u5019\uff0crange-base for\u5c31\u7528\u4e0d\u4e86\u4e86.<br \/>\n\u5728Python\u4e2d\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528<\/p>\n<pre><code class=\" line-numbers\">for i in range(0,5):\n    print i\n<\/code><\/pre>\n<p>\u6765\u5b9e\u73b0\u57fa\u4e8e\u8303\u56f4\u7684range-base for<\/p>\n<p>\u56e0\u6b64\u4e3a\u4e86\u5728C++\u4e2d\u5b9e\u73b0\u7c7b\u4f3c\u7684\u529f\u80fd\uff0c\u6211\u4eec\u53ef\u4ee5\u81ea\u5b9a\u4e49\u4e00\u4e2aclass\u5e76\u5728\u5176\u4e2d\u5c01\u88c5iterator\u6765\u5b9e\u73b0\u3002<\/p>\n<pre><code class=\" line-numbers\">#pragma GCC optimize(\"O3\")\n\n#include &lt;iostream&gt;\n#include &lt;vector&gt;\n#include &lt;cstring&gt;\n#include &lt;algorithm&gt;\n#include &lt;array&gt;\n#include &lt;iterator&gt;\n\nusing namespace std;\n\nclass range {\npublic:\n    class iterator {\n        friend class range;\n\n    public:\n        int operator*() const { return i_; }\n\n        iterator &amp;operator++() {\n            ++i_;\n            return *this;\n        }\n\n        iterator operator++(int) {\n            iterator copy(*this);\n            ++i_;\n            return copy;\n        }\n\n        bool operator==(const iterator &amp;other) const { return i_ == other.i_; }\n\n        bool operator!=(const iterator &amp;other) const { return i_ != other.i_; }\n\n    protected:\n        iterator(int start) : i_(start) {}\n\n    private:\n        int i_;\n    };\n\n    iterator begin() const { return begin_; }\n\n    iterator end() const { return end_; }\n\n    range(int begin, int end) : begin_(begin), end_(end) {}\n\nprivate:\n    iterator begin_;\n    iterator end_;\n};\n\ntemplate&lt;typename T&gt;\nclass reverse_iterator_class {\npublic:\n    explicit reverse_iterator_class(const T &amp;t) : t(t) {}\n\n    typename T::const_reverse_iterator begin() const { return t.rbegin(); }\n\n    typename T::const_reverse_iterator end() const { return t.rend(); }\n\nprivate:\n    const T &amp;t;\n};\nusing ll = long long;\n\ntemplate&lt;typename T&gt;\nreverse_iterator_class&lt;T&gt; reverse(const T &amp;t) {\n    return reverse_iterator_class&lt;T&gt;(t);\n}\n<\/code><\/pre>\n<p>\u4e8e\u662f\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u8fd9\u4e48\u7528:<\/p>\n<pre><code class=\" line-numbers\">for(auto i:range(0,5)) {\n    cout &lt;&lt; i &lt;&lt; endl;\n}\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>C++11\u4ee5\u540e\u652f\u6301range-base for ES6\u4ee5\u540e\uff0cJavaScript\u5728\u4f7f\u7528for\u7684\u65f6\u5019\u53ef\u4ee5\u8fd9\u4e48\u5199: [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spay_email":"","footnotes":"","jetpack_publicize_message":"","jetpack_is_tweetstorm":false},"categories":[39,40],"tags":[],"class_list":["post-319","post","type-post","status-publish","format-standard","hentry","category-c","category-40"],"jetpack_featured_media_url":"","jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/s8UC2c-319","jetpack_likes_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/haoyuan.info\/index.php?rest_route=\/wp\/v2\/posts\/319","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/haoyuan.info\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/haoyuan.info\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/haoyuan.info\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/haoyuan.info\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=319"}],"version-history":[{"count":2,"href":"https:\/\/haoyuan.info\/index.php?rest_route=\/wp\/v2\/posts\/319\/revisions"}],"predecessor-version":[{"id":321,"href":"https:\/\/haoyuan.info\/index.php?rest_route=\/wp\/v2\/posts\/319\/revisions\/321"}],"wp:attachment":[{"href":"https:\/\/haoyuan.info\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=319"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/haoyuan.info\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=319"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/haoyuan.info\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=319"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}