C++学习笔记(四)之 STL

来源:互联网 发布:用代理不能上公司淘宝 编辑:程序博客网 时间:2024/06/06 18:18

1、映射

map(映射),multimap(多映射)----------存取一对数据
红黑树(数据结构)
基本操作:

insert:4种方法,count和find,

erase:3种方法。

不能通过find进行修改
demo:

#include<iostream>#include<map>using namespace std;int main(){map<int, string> a;multimap<int, string>am;a.insert(map<int, string>::value_type(1, "one"));//key键,value值a.insert(map<int, string>::value_type(2, "two"));a.insert(map<int, string>::value_type(3, "three"));a.insert(make_pair(-1, "minus one"));a.insert(pair<int,string>(1000, " one thousand"));a[100000] = "one miu";cout << "最简单的查找:" << endl;//cout <<a[]<< endl;cout << "map里共有:" << a.size() << "对键值对数据" << endl;cout << "Data is:" << endl;map<int, string>::iterator iter = a.begin();for (; iter != a.end(); ++iter){cout << "Key:" << iter->first;cout << "  Value:" << iter->second.c_str() << endl;}am.insert(multimap<int, string>::value_type(3, "Three"));am.insert(multimap<int, string>::value_type(21, "fou five"));am.insert(make_pair(11, "six Four"));am.insert(pair<int, string>(66, "Seven Tex"));am.insert(pair<int, string>(66, "Eight Nine"));cout << "multimap里共有:" << am.size() << "对键值对数据" << endl;cout << "Data is:" << endl;map<int, string>::iterator iter1 = am.begin();for (; iter1 != am.end(); ++iter1){cout << "Key:" << iter1->first;cout << "  Value:" << iter1->second.c_str() << endl;}cout << "multimap有" << am.count(66) << "个66" << endl;multimap<int, string>::const_iterator fi;fi = am.find(66);if (fi != am.end()){cout << "Find it:" << endl;size_t n = am.count(66);for (size_t i = 0; i < n; i++){cout<<fi->first << "=" << fi->second.c_str() << endl;fi++;}}elsecout << "No Find!" << endl;if (a.erase(-1)>0)cout << endl << "delete success!" << endl;multimap<int, string>::iterator p = am.find(66);if (p != am.end()){am.erase(p);cout << "delete 66 success!" << endl;}am.erase(am.lower_bound(180), am.upper_bound(1000));system("pause");return 0;}


2、队列

队列queue  FIFO先进先出  双端操作只能用list、deque而不能用vector作队列(容器适配器不是原始的)

#include<iostream>#include<queue>#include<list>#include<deque>using namespace std;int main(){queue<int, list<int>> a;queue<int, deque<int>> b;queue<int> c;c.push(1);//压入数据c.push(2);c.push(3);c.push(4);c.push(5);c.push(6);cout << "队列里的数据:" << c.size() << endl;cout << "对首data:" << c.front() << endl;cout << "队尾数据;" << c.back() << endl;c.pop();//对首删除cout << "对首data:" << c.front() << endl;while (c.size()){cout << c.front() << " ";c.pop();}if (c.empty())cout << "队列为空" << endl;system("pause");return 0;}

3、set

set(不重复)/multiset(可重复)
红黑树(数据结构)
基本操作:insert、count和find、erase不能通过find进行修改

demo:

#include<iostream>#include<set>using namespace std;template<typename T>void PrintC(T& a){T::iterator i = a.begin();cout << "Imshow Data:"<<endl;while (i != a.end()){cout << *i++ << endl;}}int main(){set<int> a;a.insert(60);a.insert(160);a.insert(6);a.insert(-1);a.insert(0);multiset<int>ma;ma.insert(a.begin(),a.end());ma.insert(60);PrintC(a);//cout << "imshow:" << endl;//set<int>::iterator i = a.begin();//for (; i != a.end();)//cout << *i++ << endl;//cout << "a中有几个60:" << a.count(60) << endl;//要么1要么0//cout << "imshow:" << endl;/*multiset<int>::iterator i1 = ma.begin();for (; i1 != ma.end();)cout << *i1++ << endl;cout << "ma中有几个60:" << ma.count(60) << endl;*/cout << endl << endl;ma.insert(-60);ma.insert(-60);ma.insert(-60);int num;cout << "要删除的数:";cin >> num;ma.erase(num);//全部删完PrintC(ma);set<int>::iterator f = a.find(-1);//返回值为迭代器if (f != a.end())cout << "Find it:" << *f << endl;system("pause");return 0;}
4、栈

LIFO后进先出单端操作可以用list、deque、vector做栈


#include<iostream>#include<stack>#include<vector>#include<list>using namespace std;int main(){stack<int, deque<int>> a;stack<int, vector<int>> b;stack<int, list<int>> c;stack<int>d;d.push(25);d.push(10);d.push(1);d.push(5);cout << "How much data:" << d.size() << endl;while (d.size()){//每top一个pop一下接着取以下元素int x = d.top();//cheak datad.pop();//deletecout << x << endl;}cout << "还有多少:" << d.size() << endl;system("pause");return 0;}

5、STL算法

0 0
原创粉丝点击