<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] ### 自定義插入 ``` int transmogrify(int x); // 這個函數從x // 產生一些新值 vector values; ... // 把數據放入values vector results; // 把transmogrify應用于 transform(values.begin(), values.end(), // values中的每個對象 results.end(), // 把這個返回的values transmogrify); // 附加到results // 這段代碼有bug! ``` transform被告知它的目的區間是從results.end()開始的,所以那就是開始寫在values的每個元素上調 用transmogrify的結果的地方。就像所有使用目標區間的算法,transform通過對目標區間的元素賦值的方法寫 入結果,transform會把transmogrify應用于values\[0\]并把結果賦給\*results.end()。然后它會把transmogrify應用于 value\[1\]并把結果賦給\*(results.end()+1)。那只能帶來災難,因為在\*results.end()沒有對象,\*(results.end()+1)也 沒有!調用transform是錯誤的,因為它會給不存在的對象賦值. ### 正確使用transform ***** 把transform的結果放入 叫做results容器的結尾”的方式是調用back\_inserter來產生指定目標區間起點的迭代器: ``` vector results; // 把transmogrify應用于 transform(values.begin(), values.end(), // values中的每個對象, back_inserter(results), // 在results的結尾 transmogrify); // 插入返回的value ``` 所以你可以在任何提供push\_back的容器上使用 back\_inserter,如果你想讓一個算法在容器的前端插入東西,你可以使用front\_inserter。在內部,front\_inserter利用了push\_front。所以front\_insert只和提供front_back成 員函數的容器配合(也就是deque和list): ``` ... // 同上 list results; // results現在是list transform(values.begin(), values.end(), // 在results前端 front_inserter(results), // 以反序 transmogrify); // 插入transform的結果 ``` ### inserter的使用 ***** inserter允許你強制算法把它們的結果插入容器中的任意位置: ``` vector values; // 同上 ... vector results; // 同上,除了現在 ... // 在調用transform前 // results已經有一些數據 transform(values.begin(), values.end(), // 把transmogrify的 inserter(results, results.begin() + results.size()/2), // 結果插入 transmogrify); // results的中間 ``` ### 確保目標區間足夠大 ***** 條款5解釋了對于連續內存容器插入數據需要用到區間函數,但是transform會對目的區間每次寫入一個值,你無法改變。 當你要插入的容器是vector或string時,你可以通過按照條款14的建議最小化這個代價,預先調用reserve。 ``` vector values; // 同上 vector results; results.reserve(results.size() + values.size()); // 同上 transform(values.begin(), values.end(), // 把transmogrify的結果 back_inserter(results), // 寫入results的結尾, transmogrify); // 處理時避免了重新分配 ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看