<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 功能強大 支持多語言、二開方便! 廣告
                [TOC] # 簡介 vector的數據安排以及操作方式,與array非常相似. Vector是動態空間,隨著元素的加入,它的內部機制會自動擴充空間以容納新元素。因此vector的運用對于內存的合理利用與運用的靈活性有很大的幫助,我們再也不必害怕空間不足而一開始就要求一個大塊頭的array了 ![](https://img.kancloud.cn/bd/06/bd063b095a58a5e9cb1c1b62f6b17f0f_647x348.png) ~~~ #include<vector> ~~~ # vector迭代器 Vector維護一個線性空間,所以不論元素的型別如何,普通指針都可以作為vector的迭代器,因為vector迭代器所需要的操作行為,如`operaroe*, operator->, operator++, operator--, operator+, operator-, operator+=, operator-=`, 普通指針天生具備。Vector支持隨機存取,而普通指針正有著這樣的能力。所以vector提供的是隨機訪問迭代器(Random Access Iterators). 根據上述描述,如果我們寫如下的代碼: ~~~ Vector::iterator it1; Vector::iterator it2; ~~~ It1的型別其實就是`Int*`,it2的型別其實就是`Teacher*`. # 數據結構 Vector所采用的數據結構非常簡單,線性連續空間, 它以兩個迭代器\_Myfirst和\_Mylast分別指向配置得來的連續空間中目前已被使用的范圍, 并以迭代器\_Myend指向整塊連續內存空間的尾端。 為了降低空間配置時的速度成本,vector實際配置的大小可能比客戶端需求大一些,以備將來可能的擴充,這邊是**容量**的概念。換句話說,一個vector的容量永遠大于或等于其大小,一旦容量等于大小,便是滿載,下次再有新增元素,整個vector容器就得另覓居所。 # 注意 所謂動態增加大小,并不是在原空間之后續接新空間(因為無法保證原空間之后尚有可配置的空間),而是一塊更大的內存空間,然后將原數據拷貝新空間,并釋放原空間。因此,對vector的任何操作,一旦引起空間的重新配置,指向原vector的所有迭代器就都失效了。務必小心。 # 代碼 ## 構造 ~~~ vector<T> v; //采用模板實現類實現,默認構造函數 vector(v.begin(), v.end());//將v[begin(), end())區間中的元素拷貝給本身。 vector(n, elem);//構造函數將n個elem拷貝給本身。 vector(const vector &vec);//拷貝構造函數。 ~~~ ~~~ #include<vector> void printVector(const vector<int> &vec) { for (vector<int>::const_iterator it = vec.begin(); it != vec.end(); ++it) { cout << *it << " "; } cout << endl; } void printRvector(vector<int> &vec) { for (vector<int>::reverse_iterator it = vec.rbegin(); it != vec.rend(); ++it) { cout << *it << " "; } cout << endl; } void test02() { int arr[] = { 2, 3, 1, 9, 8 }; vector<int> v(arr, arr + sizeof(arr) / sizeof(int)); printVector(v); printRvector(v); vector<int> v2(10, 6); printVector(v2); } ~~~ ## 賦值操作 ~~~ assign(beg, end);//將[beg, end)區間中的數據拷貝賦值給本身。 assign(n, elem);//將n個elem拷貝賦值給本身。 vector&operator=(const vector &vec);//重載等號操作符 swap(vec);// 將vec與本身的元素互換。 ~~~ ~~~ vector<int> v; v.assign(10, 6); vector<int> v2; v2.push_back(1); v2.push_back(2); v2.push_back(3); printVector(v); printVector(v2); cout << "===================" << endl; v.swap(v2); printVector(v); printVector(v2); ~~~ ## 大小操作 ~~~ size();//返回容器中元素的個數 empty();//判斷容器是否為空 resize(int num);//重新指定容器的長度為num,若容器變長,則以默認值填充新位置。如果容器變短,則末尾超出容器長度的元素被刪除。 resize(int num, elem);//重新指定容器的長度為num,若容器變長,則以elem值填充新位置。如果容器變短,則末尾超出容器長>度的元素被刪除。 capacity();//容器的容量 reserve(int len);//容器預留len個元素長度,預留位置不初始化,元素不可訪問。 ~~~ ~~~ //1.resize開辟空間,并初始化 //2.reserve開辟空間,但不初始化 vector<int> v2; v2.push_back(1); v2.push_back(2); v2.push_back(3); cout << "size:" << v2.size() << endl; v2.resize(5); cout << "size:" << v2.size() << endl; printVector(v2); v2.reserve(20); v2.push_back(20); printVector(v2); cout << "size:" << v2.size() << endl; cout << "capacity:" << v2.capacity() << endl; //cout << v2[10] << endl;//err,不能訪問未初始化的空間 ~~~ ## 數據存取 ~~~ at(int idx); //返回索引idx所指的數據,如果idx越界,拋出out_of_range異常。 operator[];//返回索引idx所指的數據,越界時,運行直接報錯 front();//返回容器中第一個數據元素 back();//返回容器中最后一個數據元素 ~~~ ## 插入和刪除 ~~~ insert(const_iterator pos, int count,ele);//迭代器指向位置pos插入count個元素ele. push_back(ele); //尾部插入元素ele pop_back();//刪除最后一個元素 erase(const_iterator start, const_iterator end);//刪除迭代器從start到end之間的元素 erase(const_iterator pos);//刪除迭代器指向的元素 clear();//刪除容器中所有元素 ~~~
                  <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>

                              哎呀哎呀视频在线观看