您的位置:首页 > 编程语言 > C语言/C++

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

2017-05-09 19:42 330 查看
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++;
}
}
else
cout << "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 <<
bd71
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 data
d.pop();//delete

cout << x << endl;
}
cout << "还有多少:" << d.size() << endl;

system("pause");
return 0;
}

5、STL算法



















内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: