C++ primer——vector
Vector
1、vector能容納絕大多數類型的對象作為其元素,但是因為引用不是對象,所以不存在包含引用的vector
2、Vector是一個類模板,實例化
(1)?Vector<int> ivec;
(2)?Vector<Sales_item> Sales_vec;
(3)?Vector<vector<string>> file;
3、定義和初始化vector對象
(1)?Vector<T> v1;
(2)?Vector<T> v2(v1);
(3)?Vector<T> v2 = v1;
(4)?Vector<T> v3(n, val); ?v3包含了n個重復的元素,每個元素的值都是val
(5)?Vector<T> v4(n); ??v4包含了n個重復地執行了值初始化對象
(6)?Vector<T> v5{a, b, c ...) ??v5包含了初始值個數的元素,每個元素被賦予相應的初始值
(7)?Vector<T> v5 = {a, b, c ...} ?等價于(6)
????(6)、(7)新版本才能用(C++ 11新標準)
4、Vector操作
(1)?V.empty() ?????如果v不含有任何元素,返回真;否則返回假
(2)?V.size() ???????返回v中元素的個數
(3)?V.push_back(t) ?向v的尾端添加一個值為t的元素
(4)?V[n] ??????????返回v中第n個位置上元素的引用
(5)?V1 = v2 ???????用v2中元素的拷貝替換v1中的元素
(6)?V1 == v2 ??????v1和v2相等當且僅當它們的元素數量相同且對應位置 ???? 的元素都相同
(7)?V1 != v2
(8)?<, <=, >, >= ????顧明思義,以字典順序進行比較
5、迭代器 ?--- ?提供了對對象的間接訪問,其對象是容器中的元素或string對象中的字符
Auto b = v.begin(), e = v.end();
(1)?迭代器運算符
①?*iter ?返回迭代器所指元素的引用
②?Iter->mem解引用iter并獲取該元素的名為men的成員,等價于(*iter).mem
③?++iter ???令iter指示容器中的下一個元素
④?--iter ????令iter指示容器中的上一個元素
⑤?Iter1 == iter2 ??判斷兩個迭代器是都相等(不相等),如果兩個迭代
⑥?Iter1 != iter2 ??器指示的是同一個元素或者他們是同一個容器的尾后迭代器,則相等;反之,不相等。
(2)?迭代器類型
①?Vector<int>::iterator it; ??it能讀寫vector<int>的元素
②?String::iterator it2; ??it2能讀寫string對象中的字符
③?Vector<int>::const_iterator it3; ?it3只能讀元素,不能寫元素
④?String::const_iterator it4; ???it4只能讀字符,不能寫字符
(3)?凡是使用了迭代器的循環體,都不要向迭代器所屬的容器添加元素。
(4)?使用迭代器完成一個二分搜索
Auto beg = text.begin(), end = text.end();
Auto mid = text.begin() + (end - beg) / 2;
While (mid != end && *mid != sought) {
If (sought < *mid)
End = mid;
???????????????Else
Beg = mid + 1;
Mid = beg + (end - beg) /2;
}
6、vector對象是如何增長的?
標準庫實現者采用了可以減少容器空間重新分配次數的策略。當不得不獲取新的內存空間時,vector和string的實現通常會分配比新的空間需求更大的內存空間。容器預留這些弓箭作為備用,可用來保存更多的新元素。這樣,就不需要每次添加新元素都重新分配容器的內存空間了。
這種分配策略比每次添加新元素時都重新分配容器內存空間的策略要高效得多。其實際新能也表現得足夠好——雖然vector在每次重新分配內存空間時都要移動所有元素,但使用此策略后,其擴張操作通常比list和deque還要快。
Vector的實現采用的策略似乎是在每次需要分配新內存空間是將當前容量翻倍。
7、Capacity和size
???容器的size是指它已經保存的元素的數目;而capacity則是在不分配新的內存空間的前提下它最多可以保存多少元素。
總結
以上是生活随笔為你收集整理的C++ primer——vector的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Web安全通讯之JWT的Java实现
- 下一篇: 移动页面自适应手机屏幕宽度HTML5开发