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

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ##實戰c++中的vector系列--vector<unique_ptr<>>賦值給vector<unique_ptr<>> 之前博客講到 vector可以使用insert方法,將一個vector copy到另一個vector的后面。 之前的博客也講到過,如果vector容器內部放的是unique_ptr是需要進行所有權轉移的。 現在就來八一八如何`vector<unique_ptr<>> insert to vector<unique_ptr<>>` 如果常規的vector,我們就可以這么使用insert: ~~~ // inserting into a vector #include <iostream> #include <vector> int main () { std::vector<int> myvector (3,100);//100 100 100 std::vector<int>::iterator it; it = myvector.begin(); it = myvector.insert ( it , 200 );//200 100 100 100 myvector.insert (it,2,300);//300 300 200 100 100 100 // "it" no longer valid, get a new one: it = myvector.begin(); std::vector<int> anothervector (2,400); myvector.insert (it+2,anothervector.begin(),anothervector.end()); //now, 300 300 400 400 200 100 100 100 int myarray [] = { 501,502,503 }; myvector.insert (myvector.begin(), myarray, myarray+3); std::cout << "myvector contains:"; for (it=myvector.begin(); it<myvector.end(); it++) std::cout << ' ' << *it; std::cout << '\n'; return 0; } //輸出: 501 502 503 300 300 400 400 200 100 100 100 ~~~ 但是對于vector內的unique point來說,就不能簡單的使用普通迭代器了:需要使用對迭代器就行std::make_move_iterator操作: 看下英文描述最可靠:? A move_iterator is an iterator adaptor that adapts an iterator (it) so that dereferencing it produces rvalue references (as if std::move was applied), while all other operations behave the same. 就跟我們之前用到的std::move作用是一樣一樣的~? 看看使用例子: ~~~ #include <iostream> // std::cout #include <iterator> // std::make_move_iterator #include <vector> // std::vector #include <string> // std::string #include <algorithm> // std::copy int main () { std::vector<std::string> foo (3); std::vector<std::string> bar {"one","two","three"}; std::copy ( make_move_iterator(bar.begin()), make_move_iterator(bar.end()), foo.begin() ); // bar now contains unspecified values; clear it: bar.clear(); std::cout << "foo:"; for (std::string& x : foo) std::cout << ' ' << x; std::cout << '\n'; return 0; } //輸出: foo: one two three ~~~ 接下來就是我們的使用了,簡單了吧: ~~~ #include<iostream> #include<vector> #include <memory> using namespace std; void display_vector(vector<unique_ptr<int>> &vec); int main() { vector<unique_ptr<int>> vec; unique_ptr<int> s1(new int(1)); unique_ptr<int> s2(new int(2)); unique_ptr<int> s3(new int(3)); unique_ptr<int> s4(new int(4)); vec.push_back(std::move(s1)); vec.push_back(std::move(s2)); vec.push_back(std::move(s3)); vec.push_back(std::move(s4)); unique_ptr<int> s5(new int(5)); vector<unique_ptr<int>> des_vec; des_vec.push_back(std::move(s5)); des_vec.insert(des_vec.end(), std::make_move_iterator(vec.begin()), std::make_move_iterator(vec.end())); display_vector(des_vec); cout << "now, des_vec size: " << des_vec.size() << endl; cout << "now, vec size: " << vec.size() << endl; return 0; } void display_vector(vector<unique_ptr<int>> &vec) { for (auto it = vec.begin(); it != vec.end(); it++) { cout << **it << endl; } //輸出結果: 5 1 2 3 4 now, des_vec size: 5 now, vec size: 4 ~~~
                  <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>

                              哎呀哎呀视频在线观看