关于栈的应用:
- // 栈的五种操作
- 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"); }