############################################## 一 vector 使用 初始化 vector<int> v1; // ... vector<int> v2 = v1; vector<int> v3(v1); // 構造 vector<int> Data(1000); ---------------- vector<string> names(20, “Unknown”); // names.size() = 20 ---------------- vector<int> v(3,7); // ... vector<int> v2(v); vector<int> v3(v.begin(), v.end()); // v3 equals to v2 vector<int> v4(v.begin(), v.begin() + (v.size()/2)); vector<int> v5(v.begin()+(v.size()/2), v.end()); ---------------- int data[] = { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31 }; vector<int> primes(data, data+(sizeof(data) / sizeof(data[0]))); ---------------- 矩陣 int N, M; // ... vector< vector<int> > Matrix(N, vector<int>(M, -1)); ---------------- 方法 int elements_count = v.size(); // 取長度 bool is_nonempty_ok = !v.empty(); //是否爲空 v.resize(25); // 長度重定義爲25 v.push_back(i) // 加一項 v.insert(v.begin(), 42); // 第一項插入42 // 插入一段或整個vector<T> vector<int> v(2,1); // {1,1} vector<int> v2(2,3); // {3,3} v.insert(v.begin(), v2.begin(), v2.end()); // {3,3,1,1} // 擦除 v.erase(v.begin()+1); v.erase(v.begin(),v.end()); v.erase(v.begin()+2,v.begin()+4); //擦掉第2,3個 #################################################### #include <algorithm> reverse();的使用 ---------------- int data1[10] = { 1, 3, 5, 7, 9, 11, 13, 15, 17, 19 }; reverse(data1+2, data1+6); // the range { 5, 7, 9, 11 } is now { 11, 9, 7, 5 }; ---------------- string ste[4] = {"aa","bb","cc","dd"}; reverse(ste, ste+4); ---------------- int data[] = { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31 }; vector<int> primes(data, data+(sizeof(data) / sizeof(data[0]))); reverse(primes.begin(), primes.end()); ---------------- find 的使用 返回值爲指針 vector<int> v; for(i = 1; i < 100; i++) v.push_back(i*i); if(vector<int>::iterator it = find(v.begin(), v.end(), 49)) { if (it != v.end()) cout << *it; } ---------------- string ste[4] = {"aa","bb","cc","dd"}; cout << find(ste,ste+4, "cc") - ste << endl; // 2 max_element() min_element() 入參的第三個函數均是int_less(return a<b;)時,可以得到最靠前(如果是a<=b則得到相對位置靠後)的正確的最大或最小值 ---------------- int data[5] = { 1, 5, 2, 4, 3 }; vector<int> X(data, data+5); int v1 = *max_element(X.begin(), X.end(), funmax()); // funmax的規則是x<y, max = fun(x,y)? y:x; int v2 = *min_element(X.begin(), X.end(), funmin()); // funmax的規則是x<y, min = fun(x,y)? x:y; int v3 = *max_element(data, data+5); // Returns value of max element in array int i4 = min_element(data, data+5) - data; // Returns index of min element in array
強大的STL(一)
C++提供的標準庫STL非常強大,可以這麼說,熟練掌握STL的一些算法和類的使用可以很大程度上提高編程的速度,並且使用STL一些類來編程,你可以站在更高的層次思考一個問題,這其實也等於簡化了問題的難度,想象一下如果同樣的兩位選手要修理同樣的機器,那麼攜帶了強大工具的那位選手肯定更佔優勢。
這幾天整理了一下STL中一些有用的算法和數據結構,以工具的方式寫的,在使用的時候如果有記得不是很清楚的地方可以很方便的查找。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.