STL——STL小结
·这个就是个偷懒的玩意儿 ? 一、介绍: ·STL:标准模板库.Standard Template Library ·STL中有神马???: pair ?二、Pair ·#include <utility> #include <cstdio> #include <utility> using namespace std; int main() { pair <int,int> _pair1,_pair2; _pair1.first = 1,_pair1.second = 2; _pair2.first = 2,_pair2.second = 2; printf("%dn",_pair1 < _pair2); return 0; } 三、vector ·#include <vector> #include <cstdio> #include <vector> using namespace std; int main() { vector <int> vec; vec.push_back(1); vec.push_back(2); vec.push_back(3); printf("%d %d %dn",vec[0],vec[1],vec[2]); printf("size = %dn",vec.size()); vec.clear(); printf("size = %dn",vec.size()); return 0; } ·STL数据结构的begin()和end() ?四、 stack ·#include <stack> #include <cstdio> #include <stack> using namespace std; int main() { stack <int> s; while (!s.empty()) s.pop(); //clear s.push(1); s.push(2); s.push(3); printf("%dn",s.top()); s.pop(); printf("%dn",s.top()); return 0; } ?五、queue ·#include <queue> ?六、deque ·#include <deque> #include <cstdio> #include <deque> using namespace std; int main() { deque <int> d; d.clear(); d.push_back(1); d.push_back(2); d.push_back(3); printf("%dn",d.front()); printf("%dn",d.back()); d.pop_back(); printf("%dn",d.back()); d.push_front(100); d.push_front(200); d.push_front(300); printf("%dn",d.back()); d.pop_front(); printf("%dn",d.back()); return 0; } 七、bitset ·#include <bitset> #include <cstdio> #include <iostream> #include <bitset> using namespace std; int main() { bitset <5> b; b[1] = 1; b[2] = 1; cout << b << endl; return 0; } 八、priority_queue ·#include <queue> #include <cstdio> #include <queue> using namespace std; int main() { priority_queue <int> q; //澶ф牴鍫? //priority_queue <int,vector<int>,greater<int> > q; //灏忔牴鍫? while (!q.empty()) q.pop(); //clear q.push(1); printf("%dn",q.top()); q.push(2); printf("%dn",q.top()); q.push(3); printf("%dn",q.top()); q.push(4); printf("%dn",q.top()); q.pop(); printf("%dn",q.top()); return 0; } 九、set ·#include <set> #include <cstdio> #include <set> using namespace std; int main() { set <int> s; s.clear(); s.insert(1); s.insert(100); printf("%dn",s.find(10) == s.end()); s.insert(10); printf("%dn",s.find(10) == s.end()); s.erase(10); printf("%dn",s.find(10) == s.end()); return 0; } 十、multiset ·#include <set> #include <cstdio> #include <set> using namespace std; int main() { multiset <int> m; m.clear(); m.insert(1); m.insert(100); printf("%dn",m.find(10) == m.end()); m.insert(10); printf("%dn",m.find(10) == m.end()); m.insert(10); printf("%dn",m.count(10)); m.erase(10); printf("%dn",m.find(10) == m.end()); printf("%dn",m.count(10)); return 0; } ?十一、map ·#include <map> #include <cstdio> #include <map> using namespace std; int main() { map <int,int> m; m.clear(); m.insert(make_pair(1,1)); m[2] = 2; m[3] = 3; printf("%d %dn",m.find(1) == m.end(),m.find(4) == m.end()); printf("%d %dn",m[1],m[2]); m.erase(1); printf("%dn",m.find(1) == m.end()); return 0; } 十二、hash_map ·不想自己写hash,不建议使用c++的hash_map. 十三、iterator ·每个STL数据结构都有对应的iterator,中文叫迭代器. #include <cstdio> #include <cstdlib> #include <ctime> #include <set> using namespace std; int main() { srand(time(0)); set<int> s; for (int i = 1; i <= 10; ++i) { int x = rand() % 100000; if (s.find(x) == s.end()) s.insert(x); } for (set<int>::iterator iter = s.begin(); iter != s.end(); iter++) { printf("%d ",*iter); } puts(""); set<int>::iterator lower_iter = s.lower_bound(10000); set<int>::iterator upper_iter = s.upper_bound(10000); printf("%d %dn",*lower_iter,*upper_iter); return 0; } 十四、lower_bound(),upper_bound() ·对于一个set,可以用lower_bound和upper_bound来进行二分查询: 十五、Caution ·注意:STL的数据结构比较金贵,所以要时刻考虑是不是为空的情况,否则很容易RE. 十六、algorithm ·STL里还有一个算法库,有几个比较好用的算法. #include <cstdio> #include <algorithm> using namespace std; int main() { int x = 1,y = 2; printf("%dn",min(x,y)); printf("%dn",max(x,y)); swap(x,y); printf("%d %dn",x,y); int a[10]; a[1] = 5; a[2] = 6; a[3] = 3; a[4] = 4; sort(a + 1,a + 4 + 1); //end should be a+4 + 1!!! printf("%d %d %d %dn",a[1],a[2],a[3],a[4]); reverse(a + 1,a + 4 + 1); printf("%d %d %d %dn",a[4]); random_shuffle(a + 1,a[4]); puts(""); a[1] = 1,a[2] = 2,a[3] = 3; for (int i = 1; i <= 6; ++i) { printf("%d %d %dn",a[3]); next_permutation(a + 1,a + 3 + 1); } return 0; } 十七、sort ·algorithm中比较重要的函数就是sort(). 十八、reverse ·这个比较简单,就是把一个数组进行翻转. 十九、random_shuffle ·这个也比较简单,就是把一个数组的内容打乱. 二十、next_permutation ·这个也比较简单,就是生成当前排列的下一个排列(字典序意义). ·注:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |