关于栈的应用:
- // 栈的五种操作
- stack <char> my; //定义栈
- my.empty() ; // 判断栈是否非空
- my.size(); // 判断栈中元素的个数
- my.push(a[i]); // 压栈
- my.top(); // 取出栈顶元素
- my.pop(); // 弹出栈顶元素
下面附一个例子:
post code:
#include<stack>
#include<iostream>
using namespace std;
stack<int> my;
void show()
{
int element;
cout<<"show all element!"<<endl;
while(!my.empty()) //如不为空 继续输出
{
element=my.top(); //输出栈顶元素
cout<<element<<" "<<my.top()<<endl;
my.pop(); //将元素出栈
}
}
int main()
{
int a[5]={1,2,3,4,5},i;
for(i=0;i<=4;i++)
my.push(a[i]); //将元素压栈
show();
cout<<"the size of stack is "<<my.size()<<endl; //判断战中元素的个数
my.push(1);
cout<<"we push the number one"<<endl;
cout<<"the size of stack is "<<my.size();
}

关于向量的应用:
向量和数组类似 只是不用开辟固定的存储空间 随用随放
例子
//总共要注意的有五点
vector<int> my; //定义向量 my
vector<int> iterator j; //向量的游标的使用
my.push_back(a[i]); //向量的输入
*j //向量的输出
my.begin(); my.end(); //向量的起始位置和终止位置
例子
post code:
#include<vector> //包含向量的库函数
#include<iostream>
using namespace std;
int main()
{
int i;
vector<char> my; //向量的定义
vector<char>::iterator j;//向量游标的定义
char *str="Hello world!";
while(*str!='\0') //如果指针的首位置不为“\0”,指针向后退以为
{
my.push_back(*str); //向量的输入
str++; //指针向后退1位
}
for(j=my.begin();j!=my.end();j++) //注意 注意 游标j是!=最后的 这里不能用<
{
cout<<*j; //游标指向的的首位置,不等于末位置
}
cout<<endl;
} //最后输出“Hello world!”
集合的应用:
1进行排序 按字母顺绪
2去除重复项
3注意字符这里采用的是 string
set<string> my; //建立集合
ser<string>::iterator j; //设置游标
my.insert("apple") //插入数据
my.begin(); //找到最前一项
my.end(); //找到最后一项
#include<iostream>
#include<set>
using namespace std;
int main()
{
set<string> my;
set<string>::iterator j;
my.insert("apple");
my.insert("grape");
my.insert("apple");
my.insert("bear");
for(j=my.begin();j!=my.end();j++)
cout<<*j<<endl;
}
输出结果为 apple bear grape
两个apple 去重 按顺序排列
列表的应用:
注意 列表有多个应用 现在只写上排序的应用 用途很广范
list<int> my; //定义列表
list<int>::iterator j; //建立游标
my.begin(); //锁定起始位置
my.end(); //锁定结束位置
my.push_back(); //从后插入元素
例子:
post code:
#include<iostream>
#include<list>
using namespace std;
int main()
{
list<int> my;
list<int>::iterator j;
my.push_back(20); //插入数据
my.push_back(10);
my.push_back(30);
for(j=my.begin();j!=my.end();j++) //输出结果
cout<<*j<<endl;
my.sort(); //从小到大排序
for(j=my.begin();j!=my.end();j++)
cout<<*j<<endl;
my.sort(greater<int>()); //从大到小排序
for(j=my.begin();j!=my.end();j++)
cout<<*j<<endl;
}
输出的结果是
20 10 30
10 20 30
30 20 10
双端队列的应用:
双端队列的功能很强大 现在仅列出一部分
见例子
post code:
#include<iostream>
#include<deque>
using namespace std;
void show(deque<int> mydeque,char *name) //输出函数
{
deque<int>::iterator j;
cout<<"The content is "<<name<<endl;
for(j=mydeque.begin();j!=mydeque.end();j++)
cout<<*j<<" ";
cout<<endl;
}
int main()
{
deque<int> deq1;
deque<int> deq2(10,6); //10个值为6的元素
deque<int>::iterator j; //游标
show(deq1,"deq1");
show(deq2,"deq2");
deq1.push_back(2); //尾插入数据
deq1.push_back(10);
cout<<"already insert 2 and 10 in deque1 from back"<<endl;
show(deq1,"deq1");
deq1.push_front(5); //首插入数据
deq1.push_front(20);
cout<<"already insert 5 and 20 in deque1 from front"<<endl;
show(deq1,"deq1");
deq1.insert(deq1.begin()+1,3,9); //在2号位置插入3个9
cout<<"中间插入数据"<<endl;
cout<<"deq1.insert(deq1.begin()+1,3,9)"<<endl;
show(deq1,"deq1");
cout<<"deq1.at(4)="<<" "<< deq1.at(4)<<endl; //像数组查找元素 从0起始
cout<<"deq1[4]="<<" "<<deq1[4]<<endl;
show(deq1,"deq1");
cout<<" deq1.at(3)=100 deq1[4]=1000"<<endl; //赋值
deq1.at(3)=100;
deq1[4]=1000;
show(deq1,"deq1");
cout<<"deq1.pop_front() deq1.pop_back()"<<endl; //队首尾出队
deq1.pop_front();
deq1.pop_back();
show(deq1,"deq1");
cout<<"deq1.erase(deq.begin()+2)"<<endl; // 清除
deq1.erase(deq1.begin()+2);
show(deq1,"deq1");
cout<<"deq2.assign(8,2)"<<endl; //重新赋值
show(deq2,"deq2");
deq2.assign(8,2);
show(deq2,"deq2");
}
