<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                [TOC] ### what ***** 給定兩個vector,v1和v2,使v1的內容和v2的后半部分一樣的最簡單方式是什么?不要為“當v2有偶數個元素時才有 一半”而煩惱,只要做一些合理的東西。 正確答案: ``` v1.assign(v2.begin() + v2.size() / 2, v2.end()); ``` ### how ***** 不用區間成員函數來解決這個條款開頭的問題,你就必須寫一個顯式循環: ``` for (vector::const_iterator ci = v2.begin() + v2.size() / 2; ci != v2.end(); ++ci) v1.push_back(*ci); ``` 條款43詳細驗證了為什么你應該盡量避免手寫顯式循環,但你不必讀那個條款就能知道寫這段代碼比寫assign的調用要 做多得多的工作。 ` ` 避免循環的一個方法是按照條款43的建議,使用一個算法來代替: ``` v1.clear(); copy(v2.begin() + v2.size() / 2, v2.end(), back_inserter(v1)); ``` 寫這些仍然比寫assign的調用要做更多的工作。此外,雖然在這段代碼中沒有表現出循環,在copy中的確存在一個循環 (參見條款43)。結果,效率損失仍然存在。 >幾乎所有目標區間是通 過插入迭代器(比如,通過inserter,back\_inserter或front_inserter)指定的copy的使用都可以——應該——通過調用區間 成員函數來代替。 這個copy的調用可以用一個insert的區間版本代替: ``` v1.insert(v1.end(), v2.begin() + v2.size() / 2, v2.end()); ``` ### why ***** 我們已經確定兩個盡量使用區間成員函數代替它們的單元素兄弟的理由。 ● 一般來說使用區間成員函數可以輸入更少的代碼。 ● 區間成員函數會導致代碼更清晰更直接了當。 ` ` 當處理標準序列容器時,應用單元素成員函數比完成同樣目的 的區間成員函數需要更多地內存分配,更頻繁地拷貝對象,而且/或者造成多余操作 使用vector區間insert函數 ``` int data[numValues]; // 假設numValues在 其他地方定義 vector v; ... v.insert(v.begin(), data, data + numValues); // 把data中的int // 插入v前部 ``` 在一個顯式循環中使用迭代調用來插入,它可能看起來多多少少像這樣: ``` vector::iterator insertLoc(v.begin()); for (int i = 0; i < numValues; ++i) { insertLoc = v.insert(insertLoc, data[i]); ++insertLoc; } ``` 1. 把numValues個元素插入v,每次一個,自然會花費你numValues次調用insert。使用 insert的區間形式,你只要花費一次調用,節省了numValues-1次調用。 2. 無效率地把v中的現有元素移動到它們最終插入后的位置的開銷。每次調用insert來增 加一個新元素到v,插入點以上的每個元素都必須向上移動一次來為新元素騰出空間。我們在v的前部插入了numValues個元素,如果v在插入前有n個元素,則一共會發生n*numValues次移動。標準要求區間insert函數直接把現有元素移動到它們最后的位置,也就是,開銷是每個元素一次移動。 3. 重復使用單元素插入而不是一個區間插入就必須處理內存分配。就像條款14解釋的,當你試圖去把一個元素插入內存已經滿了的vector時,這個vector會分配具有更多 容量的新內存,從舊內存把它的元素拷貝到新內存,銷毀舊內存里的元素,回收舊內存。然后它添加插入的元素
                  <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>

                              哎呀哎呀视频在线观看