版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、| 全排列函數(shù)next_permutationSTL 中專門用于排列的函數(shù)(可以處理存在重復數(shù)據(jù)集的排列問題)頭文件:#include using namespace std;調(diào)用: next_permutation(start, end);注意:函數(shù)要求輸入的是一個升序排列的序列的頭指針和尾指針.用法:/ 數(shù)組int aN;sort(a, a+N);next_permutation(a, a+N);/ 向量vector ivec;sort(ivec.begin(), ivec.end();next_permutation(ivec.begin(), ivec.end();例子:vector
2、myVec;/ 初始化代碼sort(myVec.begin(),myVec.end();dofor (i = 0 ;i size;i + ) cout myVeci /t ;cout endl;while (next_permutation(myVec.begin(), myVec.end();ACM/ICPC 競賽之STL 簡介一、關于STLSTL(Standard Template Library,標準模板庫)是C+語言標準中的重要組成部分。STL 以模板類和模板函數(shù)的形式為程序員提供了各種數(shù)據(jù)結構和算法的精巧實現(xiàn),程序員如果能夠充分地利用STL,可以在代碼空間、執(zhí)行時間和編碼效率上獲得極
3、大的好處。STL 大致可以分為三大類:算法(algorithm)、容器(container)、迭代器(iterator)。STL 容器是一些模板類,提供了多種組織數(shù)據(jù)的常用方法,例如vector(向量,類似于數(shù)組)、list(列表,類似于鏈表)、deque(雙向隊列)、set(集合)、map(映象)、stack(棧)、queue(隊列)、priority_queue(優(yōu)先隊列)等,通過模板的參數(shù)我們可以指定容器中的元素類型。STL 算法是一些模板函數(shù),提供了相當多的有用算法和操作,從簡單如for_each(遍歷)到復雜如stable_sort(穩(wěn)定排序)。STL 迭代器是對C 中的指針的一般化
4、,用來將算法和容器聯(lián)系起來。幾乎所有的STL 算法都是通過迭代器來存取元素序列進行工作的,而STL 中的每一個容器也都定義了其本身所專有的迭代器,用以存取容器中的元素。有趣的是,普通的指針也可以像迭代器一樣工作。熟悉了STL 后,你會發(fā)現(xiàn),很多功能只需要用短短的幾行就可以實現(xiàn)了。通過STL,我們可以構造出優(yōu)雅而且高效的代碼,甚至比你自己手工實現(xiàn)的代碼效果還要好。STL 的另外一個特點是,它是以源碼方式免費提供的,程序員不僅可以自由地使用這些代碼,也可以學習其源碼,甚至按照自己的需要去修改它。下面是用STL 寫的題Ugly Numbers 的代碼:#include #include using
5、namespace std;typedef pair node_type;int main()unsigned long result1500;priority_queue node_type, vector,greater Q;Q.push( make_pair(1, 2) );for (int i=0; i n;while (n0)cout resultn-1 n;return 0;在ACM 競賽中,熟練掌握和運用STL 對快速編寫實現(xiàn)代碼會有極大的幫助。二、使用STL在C+標準中,STL 被組織為以下的一組頭文件(注意,是沒有.h 后綴的?。篴lgorithm / deque / fu
6、nctional / iterator / list / mapmemory / numeric / queue / set / stack / utility / vector當我們需要使用STL 的某個功能時,需要嵌入相應的頭文件。但要注意的是,在C+標準中,STL 是被定義在std 命名空間中的。如下例所示:#include int main()std:stack s;s.push(0);.return 0;如果希望在程序中直接引用STL,也可以在嵌入頭文件后,用usingnamespace 語句將std 命名空間導入。如下例所示:#include using namespace std
7、;int main()stack s;s.push(0);.return 1;STL 是C+語言機制運用的一個典范,通過學習STL 可以更深刻地理解C+語言的思想和方法。在本系列的文章中不打算對STL 做深入的剖析,而只是想介紹一些STL 的基本應用。有興趣的同學,建議可以在有了一些STL 的使用經(jīng)驗后,認真閱讀一下C+STL這本書(電力出版社有該書的中文版)。ACM/ICPC 競賽之STL-pairSTL 的頭文件中描述了一個看上去非常簡單的模板類pair,用來表示一個二元組或元素對,并提供了按照字典序對元素對進行大小比較的比較運算符模板函數(shù)。例如,想要定義一個對象表示一個平面坐標點,則可以
8、:_pair p1;cin p1.first p1.second;pair 模板類需要兩個參數(shù):首元素的數(shù)據(jù)類型和尾元素的數(shù)據(jù)類型。pair 模板類對象有兩個成員:first 和second,分別表示首元素和尾元素。在中已經(jīng)定義了pair 上的六個比較運算符:、=、=、!=,其規(guī)則是先比較first,first 相等時再比較second,這符合大多數(shù)應用的邏輯。當然,也可以通過重載這幾個運算符來重新指定自己的比較邏輯。除了直接定義一個pair 對象外,如果需要即時生成一個pair 對象,也可以調(diào)用在中定義的一個模板函數(shù):make_pair。make_pair 需要兩個參數(shù),分別為元素對的首元素
9、和尾元素。在題1067-Ugly Numbers 中,就可以用pair 來表示推演樹上的結點,用first 表示結點的值,用second 表示結點是由父結點乘以哪一個因子得到的。#include #include using namespace std;typedef pair node_type;int main()unsigned long result1500;priority_queue node_type, vector,greater Q;Q.push( make_pair(1, 2) );for (int i=0; i n;while (n0)cout resultn-1 n;r
10、eturn 0;看上去是很簡單的一個頭文件,但是的設計中卻濃縮反映了STL 設計的基本思想。有意深入了解和研究STL 的同學,仔細閱讀和體會這個簡單的頭文件,不失為一種入門的途徑。ACM/ICPC 競賽之STL-vector在STL 的頭文件中定義了vector(向量容器模板類),vector容器以連續(xù)數(shù)組的方式存儲元素序列,可以將vector 看作是以順序結構實現(xiàn)的線性表。當我們在程序中需要使用動態(tài)數(shù)組時,vector 將會是理想的選擇,vector 可以在使用過程中動態(tài)地增長存儲空間。vector 模板類需要兩個模板參數(shù),第一個參數(shù)是存儲元素的數(shù)據(jù)類型,第二個參數(shù)是存儲分配器的類型,其中第
11、二個參數(shù)是可選的,如果不給出第二個參數(shù),將使用默認的分配器。下面給出幾個常用的定義vector 向量對象的方法示例:vector s;定義一個空的vector 對象,存儲的是int 類型的元素。vector s(n);定義一個含有n 個int 元素的vector 對象。vector s(first, last);定義一個vector 對象,并從由迭代器first 和last 定義的序列first,last)中復制初值。vector 的基本操作有:si直接以下標方式訪問容器中的元素。s.front() 返回首元素。s.back() 返回尾元素。s.push_back(x) 向表尾插入元素x。s.
12、size() 返回表長。s.empty() 當表空時,返回真,否則返回假。s.pop_back() 刪除表尾元素。s.begin() 返回指向首元素的隨機存取迭代器。s.end() 返回指向尾元素的下一個位置的隨機存取迭代器。s.insert(it, x) 向迭代器it 指向的元素前插入新元素val。s.insert(it, n, x) 向迭代器it 指向的元素前插入n 個x。s.insert(it, first, last) 將由迭代器first 和last 所指定的序列first, last)插入到迭代器it指向的元素前面。s.erase(it)刪除由迭代器it 所指向的元素。s.eras
13、e(first, last) 刪除由迭代器first 和last 所_指定的序列first, last)。s.reserve(n)預分配緩沖空間,使存儲空間至少可容納n 個元素。s.resize(n)改變序列的長度,超出的元素將會被刪除,如果序列需要擴展(原空間小于n),元素默認值將填滿擴展出的空間。s.resize(n, val)改變序列的長度,超出的元素將會被刪除,如果序列需要擴展(原空間小于n),將用val 填滿擴展出的空間。s.clear()刪除容器中的所有的元素。s.swap(v)將s 與另一個vector 對象v 進行交換。s.assign(first, last)將序列替換成由迭
14、代器first 和last 所指定的序列first, last)。first, last)不能是原序列中的一部分。要注意的是,resize 操作和clear 操作都是對表的有效元素進行的操作,但并不一定會改變緩沖空間的大小。另外,vector 還有其他一些操作如反轉、取反等,不再一下列舉。vector 上還定義了序列之間的比較操作運算符(, =, =, =, !=),可以按照字典序比較兩個序列。還是來看一些示例代碼。輸入個數(shù)不定的一組整數(shù),再將這組整數(shù)按倒序輸出,如下所示:#include #include using namespace std;int main()vector L;int
15、x;while (cinx) L.push_back(x);for (int i=L.size()-1; i=0; i-) cout Li ;cout endl;return 0;ACM/ICPC 競賽之STL-iterator 簡介iterator(迭代器)是用于訪問容器中元素的指示器,從這個意義上說,iterator(迭代器)相當于數(shù)據(jù)結構中所說的“遍歷指針”,也可以把iterator(迭代器)看作是一種泛化的指針。STL 中關于iterator(迭代器)的實現(xiàn)是相當復雜的,這里我們暫時不去詳細討論關于iterator(迭代器)的實現(xiàn)和使用,而只對iterator(迭代器)做一點簡單的介紹
16、。簡單地說,STL 中有以下幾類iterator(迭代器):輸入iterator(迭代器),在容器的連續(xù)區(qū)間內(nèi)向前移動,可以讀取容器內(nèi)任意值;輸出iterator(迭代器),把值寫進它所指向的容器中;前向iterator(迭代器),讀取隊列中的值,并可以向前移動到下一位置(+p,p+);雙向iterator(迭代器),讀取隊列中的值,并可以向前向后遍歷容器;隨機訪問iterator(迭代器), 可以直接以下標方式對容器進行訪問,vector 的iterator(迭代器)就是這種iterator(迭代器);流iterator(迭代器),可以直接輸出、輸入流中的值;每種STL 容器都有自己的ite
17、rator(迭代器)子類,下面先來看一段簡單的示例代碼:#include #include using namespace std;main()vector s;for (int i=0; i10; i+) s.push_back(i);for (vector:iterator it=s.begin(); it!=s.end();it+)cout *it ;cout endl;return 1;vector 的begin()和end()方法都會返回一個vector:iterator 對象,分別指向vector 的首元素位置和尾元素的下一個位置(我們可以稱之為結束標志位置)。對一個iterato
18、r(迭代器)對象的使用與一個指針變量的使用極為相似,或者可以這樣說,指針就是一個非常標準的iterator(迭代器)。再來看一段稍微特別一點的代碼:#include #include main()vector s;s.push_back(1);s.push_back(2);s.push_back(3);copy(s.begin(), s.end(), ostream_iterator(cout, );cout endl;return 1;這段代碼中的copy 就是STL 中定義的一個模板函數(shù),copy(s.begin(),s.end(), ostream_iterator(cout, );的意
19、思是將由s.begin()至s.end()(不含s.end()所指定的序列復制到標準輸出流cout 中,用 作為每個元素的間隔。也就是說,這句話的作用其實就是將表中的所有內(nèi)容依次輸出。iterator(迭代器)是STL 容器和算法之間的“膠合劑”,幾乎所有的STL 算法都是通過容器的iterator(迭代器)來訪問容器內(nèi)容的。只有通過有效地運用iterator(迭代器),才能夠有效地運用STL 強大的算法功能。ACM/ICPC 競賽之STL-string字符串是程序中經(jīng)常要表達和處理的數(shù)據(jù),我們通常是采用字符數(shù)組或字符指針來表示字符串。STL 為我們提供了另一種使用起來更為便捷的字符串的表達方
20、式:string。string 類的定義在頭文件中。string 類其實可以看作是一個字符的vector,vector 上的各種操作都可以適用于string,另外,string 類對象還支持字符串的拼合、轉換等操作。下面先來看一個簡單的例子:#include #include using namespace std;int main()string s = Hello! , name;cin name;s += name;s += !;cout s m; / P 編碼的長度string str; / 用來存放還原出來的括號字符串int leftpa = 0; / 記錄已出現(xiàn)的左括號的總數(shù)for
21、 (int j=0; j p;for (int k=0; kp-leftpa; k+) str += (;str += );leftpa = p;ACM/ICPC 競賽之STL-stack/queuestack(棧)和queue(隊列)也是在程序設計中經(jīng)常會用到的數(shù)據(jù)容器,STL為我們提供了方便的stack(棧)的queue(隊列)的實現(xiàn)。準確地說,STL 中的stack 和queue 不同于vector、list 等容器,而是對這些容器的重新包裝。這里我們不去深入討論STL 的stack 和queue 的實現(xiàn)細節(jié),而是來了解一些他們的基本使用。1、stackstack 模板類的定義在頭文件中
22、。stack 模板類需要兩個模板參數(shù),一個是元素類型,一個容器類型,但只有元素類型是必要的,在不指定容器類型時,默認的容器類型為deque。定義stack 對象的示例代碼如下:stack s1;stack s2;stack 的基本操作有:入棧,如例:s.push(x);出棧,如例:s.pop();注意,出棧操作只是刪除棧頂元素,并不返回該元素。訪問棧頂,如例:s.top()判斷??眨缋簊.empty(),當??諘r,返回true。訪問棧中的元素個數(shù),如例:s.size()下面是用string 和stack 寫的解題1064-Parencoding 的程序。#include #include
23、#include using namespace std;int main()int n;cin n;for (int i=0; i m;string str;int leftpa = 0;for (int j=0; j p;for (int k=0; kp-leftpa; k+) str += (;str += );leftpa = p;stack s;for (string:iterator it=str.begin();it!=str.end(); it+) / 構造M 編碼if (*it=() s.push(1);elseint p = s.top(); s.pop();cout p
24、;if (!s.empty() s.top() += p;cout endl;return 0;2、queuequeue 模板類的定義在頭文件中。與stack 模板類很相似,queue 模板類也需要兩個模板參數(shù),一個是元素類型,一個容器類型,元素類型是必要的,容器類型是可選的,默認為deque 類型。定義queue 對象的示例代碼如下:queue q1;queue q2;queue 的基本操作有:入隊,如例:q.push(x); 將x 接到隊列的末端。出隊,如例:q.pop(); 彈出隊列的第一個元素,注意,并不會返回被彈出元素的值。訪問隊首元素,如例:q.front(),即最早被壓入隊列的元
25、素。訪問隊尾元素,如例:q.back(),即最后被壓入隊列的元素。判斷隊列空,如例:q.empty(),當隊列空時,返回true。訪問隊列中的元素個數(shù),如例:q.size()3、priority_queue在頭文件中,還定義了另一個非常有用的模板類priority_queue(優(yōu)先隊列)。優(yōu)先隊列與隊列的差別在于優(yōu)先隊列不是按照入隊的順序出隊,而是按照隊列中元素的優(yōu)先權順序出隊(默認為大者優(yōu)先,也可以通過指定算子來指定自己的優(yōu)先順序)。priority_queue 模板類有三個模板參數(shù),第一個是元素類型,第二個容器類型,第三個是比較算子。其中后兩個都可以省略,默認容器為vector,默認算子為
26、less,即小的往前排,大的往后排(出隊時序列尾的元素出隊)。定義priority_queue 對象的示例代碼如下:priority_queue q1;priority_queue pair q2; / 注意在兩個尖括號之間一定要留空格。priority_queueint, vector, greater q3; / 定義小的先出隊priority_queue 的基本操作與queue 相同。初學者在使用priority_queue 時,最困難的可能就是如何定義比較算子了。如果是基本數(shù)據(jù)類型,或已定義了比較運算符的類,可以直接用STL 的less算子和greater 算子默認為使用less 算子
27、,即小的往前排,大的先出隊。如果要定義自己的比較算子,方法有多種,這里介紹其中的一種:重載比較運算符。優(yōu)先隊列試圖將兩個元素x 和y 代入比較運算符(對less 算子,調(diào)用xy),若結果為真,則x 排在y 前面,y 將先于x 出隊,反之,則將y 排在x 前面,x 將先出隊??聪旅孢@個簡單的示例:#include #include using namespace std;class Tpublic:int x, y, z;T(int a, int b, int c):x(a), y(b), z(c);bool operator (const T &t1, const T &t2)return t
28、1.z t2.z; / 按照z 的順序來決定int main()priority_queue q;q.push(T(4,4,3);q.push(T(2,2,5);q.push(T(1,5,4);q.push(T(3,3,6);while (!q.empty()T t = q.top(); q.pop();cout t.x t.y t.z endl;return 0; 輸出結果為(注意是按照z 的順序從大到小出隊的):3 3 62 2 51 5 44 4 3再看一個按照z 的順序從小到大出隊的例子:#include #include using namespace std;class Tpubl
29、ic:int x, y, z;T(int a, int b, int c):x(a), y(b), z(c);bool operator (const T &t1, const T &t2)return t1.z t2.z;int main()priority_queueT, vector, greater q;q.push(T(4,4,3);q.push(T(2,2,5);q.push(T(1,5,4);q.push(T(3,3,6);while (!q.empty()T t = q.top(); q.pop();cout t.x t.y t.z endl;return 0;輸出結果為:4
30、4 31 5 42 2 53 3 6如果我們把第一個例子中的比較運算符重載為:bool operator t2.z; / 按照z 的順序來決定t1 和t2 的順序則第一個例子的程序會得到和第二個例子的程序相同的輸出結果。再回顧一下用優(yōu)先隊列實現(xiàn)的題1067-Ugly Numbers 的代碼:#include #include using namespace std;typedef pair node_type;int main( int argc, char *argv )unsigned long int result1500;priority_queue node_type, vector
31、,greater Q;Q.push( make_pair(1, 3) );for (int i=0; i n;while (n0)cout resultn-1 n;return 1;ACM/ICPC 競賽之STL-map在STL 的頭文件中定義了模板類map 和multimap,用有序二叉樹來存貯類型為pair的元素對序列。序列中的元素以const Key部分作為標識,map 中所有元素的Key 值都必須是唯一的,multimap 則允許有重復的Key 值。可以將map 看作是由Key 標識元素的元素集合,這類容器也被稱為關聯(lián)容器”,可以通過一個Key 值來快速確定一個元素,因此非常適合于需要
32、按照Key值查找元素的容器。map 模板類需要四個模板參數(shù),第一個是鍵值類型,第二個是元素類型,第三個是比較算子,第四個是分配器類型。其中鍵值類型和元素類型是必要的。map 的基本操作有:1、定義map 對象,例如:map m;2、向map 中插入元素對,有多種方法,例如:mkey = value;key操作是map 很有特色的操作,如果在map 中存在鍵值為key 的元素對,則返回該元素對的值域部分,否則將會創(chuàng)建一個鍵值為key 的元素對,值域為默認值。所以可以用該操作向map 中插入元素對或修改已經(jīng)存在的元素對的值域部分。m.insert( make_pair(key, value) );
33、也可以直接調(diào)用insert 方法插入元素對,insert 操作會返回一個pair,當map 中沒有與key 相匹配的鍵值時,其first 是指向插入元素對的迭代器,其second 為true;若map 中已經(jīng)存在與key 相等的鍵值時,其first 是指向該元素對的迭代器,second 為false。3、查找元素對,例如:int i = mkey;要注意的是,當與該鍵值相匹配的元素對不存在時,會創(chuàng)建鍵值為key 的元素對。map:iterator it = m.find(key);如果map 中存在與key 相匹配的鍵值時,find 操作將返回指向該元素對的迭代器,否則,返回的迭代器等于map
34、 的end()(參見vector 中提到的begin和end 操作)。4、刪除元素對,例如:m.erase(key);刪除與指定key 鍵值相匹配的元素對,并返回被刪除的元素的個數(shù)。m.erase(it);刪除由迭代器it 所指定的元素對,并返回指向下一個元素對的迭代器??匆欢魏唵蔚氖纠a:#include#includeusing namespace std;typedef mapint, string, less M_TYPE;typedef M_TYPE:iterator M_IT;typedef M_TYPE:const_iterator M_CIT;int main()M_TYPE
35、 MyTestMap;MyTestMap3 = No.3;MyTestMap5 = No.5;MyTestMap1 = No.1;MyTestMap2 = No.2;MyTestMap4 = No.4;M_IT it_stop = MyTestMap.find(2);cout MyTestMap2 = second second = No.2 After modification;cout MyTestMap2 = second endl;cout Map contents : endl;for(M_CIT it = MyTestMap.begin(); it != MyTestMap.end
36、();it+)cout second endl;return 0;程序執(zhí)行的輸出結果為:MyTestMap2 = No.2MyTestMap2 = No.2 After modificationMap contents :No.1No.2 After modificationNo.3No.4No.5再看一段簡單的示例代碼:#include #include using namespace std;int main()map m;mone = 1;mtwo = 2;/ 幾種不同的insert 調(diào)用方法m.insert(make_pair(three, 3);m.insert(map:value_
37、type(four, 4);m.insert(pair(five, 5);string key;while (cinkey)map:iterator it = m.find(key);if (it=m.end()cout No such key! endl;elsecout key is second endl;cout Erased m.erase(key) endl;return 0;ACM/ICPC 競賽之STL-algorithm無疑是STL 中最大的一個頭文件,它是由一大堆模板函數(shù)組成的。下面列舉出中的模板函數(shù):adjacent_find / binary_search / copy
38、 / copy_backward / count/ count_if / equal / equal_range / fill / fill_n / find /find_end / find_first_of / find_if / for_each / generate /generate_n / includes / inplace_merge / iter_swap /lexicographical_compare / lower_bound / make_heap / max /max_element / merge / min / min_element / mismatch /n
39、ext_permutation / nth_element / partial_sort /partial_sort_copy / partition / pop_heap / prev_permutation/ push_heap / random_shuffle / remove / remove_copy /remove_copy_if / remove_if / replace / replace_copy /replace_copy_if / replace_if / reverse / reverse_copy /rotate / rotate_copy / search / se
40、arch_n / set_difference /set_intersection / set_symmetric_difference / set_union /sort / sort_heap / stable_partition / stable_sort / swap /swap_ranges / transform / unique / unique_copy / upper_bound如果詳細敘述每一個模板函數(shù)的使用,足夠寫一本書的了。還是來看幾個簡單的示例程序吧。示例程序之一,for_each 遍歷容器:#include #include #include using names
41、pace std;int Visit(int v) / 遍歷算子函數(shù)cout v ;return 1;class MultInt / 定義遍歷算子類private:int factor;public:MultInt(int f) : factor(f)void operator()(int &elem) constelem *= factor;int main()vector L;for (int i=0; i10; i+) L.push_back(i);for_each(L.begin(), L.end(), Visit);cout endl;for_each(L.begin(), L.en
42、d(), MultInt(2);for_each(L.begin(), L.end(), Visit);cout endl;return 0;程序的輸出結果為:0 1 2 3 4 5 6 7 8 90 2 4 6 8 10 12 14 16 18示例程序之二,min_element/max_element,找出容器中的最小/最大值:#include #include #include using namespace std;int main()vector L;for (int i=0; i10; i+) L.push_back(i);vector:iterator min_it = min_
43、element(L.begin(),L.end();vector:iterator max_it = max_element(L.begin(),L.end();cout Min is *min_it endl;cout Max is *max_it endl;return 1;程序的輸出結果為:Min is 0Max is 9示例程序之三,sort 對容器進行排序:#include #include #include using namespace std;void Print(vector &L)for (vector:iterator it=L.begin(); it!=L.end();
44、it+)cout *it ;cout endl;int main()vector L;for (int i=0; i=5; i-) L.push_back(i);Print(L);sort(L.begin(), L.end();Print(L);sort(L.begin(), L.end(), greater(); / 按降序排序Print(L);return 0;程序的輸出結果為:0 1 2 3 4 9 8 7 6 50 1 2 3 4 5 6 7 8 99 8 7 6 5 4 3 2 1 0示例程序之四,copy 在容器間復制元素:#include #include #include us
45、ing namespace std;int main()/ 先初始化兩個向量v1 和v2vector v1, v2;for (int i=0; i=5; i+) v1.push_back(10*i);for (int i=0; i=10; i+) v2.push_back(3*i);cout v1 = ( ;for (vector :iterator it=v1.begin(); it!=v1.end();it+)cout *it ;cout ) endl;cout v2 = ( ;for (vector :iterator it=v2.begin(); it!=v2.end();it+)co
46、ut *it ;cout ) endl;/ 將v1 的前三個元素復制到v2 的中間copy(v1.begin(), v1.begin()+3, v2.begin()+4);cout v2 with v1 insert = ( ;for (vector :iterator it=v2.begin(); it!=v2.end();it+)cout *it ;cout ) endl;/ 在v2 內(nèi)部進行復制,注意參數(shù)2 表示結束位置,結束位置不參與復制copy(v2.begin()+4, v2.begin()+7, v2.begin()+2);cout v2 with shifted insert
47、= ( ;for (vector :iterator it=v2.begin(); it!=v2.end();it+)cout *it ;cout ) endl;return 1;程序的輸出結果為:v1 = ( 0 10 20 30 40 50 )v2 = ( 0 3 6 9 12 15 18 21 24 27 30 )v2 with v1 insert = ( 0 3 6 9 0 10 20 21 24 27 30 )v2 with shifted insert = ( 0 3 0 10 20 10 20 21 24 27 30 )STL in ACM容器(container):迭代器(iterator): 指針內(nèi)部實現(xiàn): 數(shù)組 / 就是沒有固定大小的數(shù)組,vector 直接翻譯是向量vector / T 就是數(shù)據(jù)類型,Alloc 是關于內(nèi)存的一個什么東西,一般是使用默認參數(shù)。支持操作:begin(), /取首個元素,返回一個iteratorend(),
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度自動化倉儲承包裝卸系統(tǒng)合同4篇
- 強化學習與深度強化-深度研究
- 個人承運合作合同書2024年版
- 基于深度學習的圖像識別技術-第2篇-深度研究
- 二零二四年商場應急事件快速響應合同2篇
- 2025年度智能化農(nóng)業(yè)用地租賃合同示范文本4篇
- 2025年度教育培訓機構門店承包合作協(xié)議4篇
- 2025年度農(nóng)業(yè)耕地租賃合同綠色農(nóng)業(yè)發(fā)展協(xié)議標準2篇
- 二零二五版農(nóng)貿(mào)場食品安全責任險合同4篇
- 人工智能在信息安全中的應用-第1篇-深度研究
- 碳排放管理員 (碳排放核查員) 理論知識考核要素細目表四級
- 撂荒地整改協(xié)議書范本
- GB/T 20878-2024不銹鋼牌號及化學成分
- 診所負責人免責合同范本
- 2024患者十大安全目標
- 印度與阿拉伯的數(shù)學
- 會陰切開傷口裂開的護理查房
- 實驗報告·測定雞蛋殼中碳酸鈣的質(zhì)量分數(shù)
- 部編版小學語文五年級下冊集體備課教材分析主講
- 電氣設備建筑安裝施工圖集
- 《工程結構抗震設計》課件 第10章-地下建筑抗震設計
評論
0/150
提交評論