总括:
stack和queue不支持迭代
stack和queue是容器适配器,由容器deque实现
一:栈Stack
(一)栈的简介
stack是堆栈容器,是一种“先进后出”的容器。
stack是简单地装饰deque容器而成为另外的一种容器。
(二)栈的默认构造
stack采用模板类实现, stack对象的默认构造形式: stack <T> stkT;
stack <int> stkInt; //一个存放int的stack容器。
stack <float> stkFloat; //一个存放float的stack容器。
stack <string> stkString; //一个存放string的stack容器。
//尖括号内还可以设置指针类型或自定义类型。
(三)栈的出栈进栈操作push和pop《重点》
stack.push(elem); //往栈头添加元素
stack.pop(); //从栈头移除第一个元素
补充:top()返回栈头数据(但是数据不出栈),所以top和pop联用
(四)栈的拷贝构造及赋值
stack(const stack &stk); //拷贝构造函数
stack& operator=(const stack &stk); //重载等号操作符
(五)数据遍历:stack和queue不提供迭代器,所以想要获取数据,必须依次取走数据
stack<int> st;
st.push(5);
st.push(4);
st.push(3); //栈底 5 4 3 栈头
while (!st.empty())
{
cout << st.top() << " ";
st.pop();
}
cout << endl;
(六)stack大小获取
stack.empty(); //判断堆栈是否为空
stack.size(); //返回堆栈的大小
(七)性能测试
#include <stack>
namespace jj06
{
void test_stack(long& s_size)
{
cout << "
test_stack()*******" << endl;
/******变量声明:数组初始********/
char buf[10];
/******变量声明:vector初始********/
stack<string> stk;
/******变量声明:记录时间********/
clock_t timeStart = clock(); //开始时间
for (long i = 0; i < s_size; i++)
{
try
{
snprintf(buf, 10, "%d", rand());
stk.push(string(buf));
}
catch (exception& e)
{
cout << e.what() << endl;
cout << "Max_size:" << i << endl;
abort(); //终止
}
}
cout << "inti stack use milli-seconds:" << (clock() - timeStart) << endl; //获取初始化数组耗时
cout << "stack.size:" << stk.size() << endl; //获取stack大小
cout << "stack.top:" << stk.top() << endl; //获取stack栈顶元素
stk.pop(); //出栈一个元素
cout << "stack.size:" << stk.size() << endl; //获取stack大小
cout << "stack.top:" << stk.top() << endl; //获取栈顶尾元素
}
}
二:队列Queue
(一)queue简介
queue是队列容器,是一种“先进先出”的容器。
queue是简单地装饰deque容器而成为另外的一种容器。
(二)queue对象的默认构造
queue采用模板类实现,queue对象的默认构造形式:queue<T> queT; 如:
queue<int> queInt; //一个存放int的queue容器。
queue<float> queFloat; //一个存放float的queue容器。
queue<string> queString; //一个存放string的queue容器。
//尖括号内还可以设置指针类型或自定义类型。
(三)queue入队出队操作push和pop《重点》
queue.push(elem); //往队尾添加元素
queue.pop(); //从队头移除第一个元素
(四)queue的数据获取back和front《通常和上面联用》
queue.back(); //返回最后一个元素
queue.front(); //返回第一个元素
(五)queue队列大小获取
queue.empty(); //判断队列是否为空
queue.size(); //返回队列的大小
(六)性能测试
#include <queue>
namespace jj07
{
void test_queue(long& q_size)
{
cout << "
test_queue()*******" << endl;
/******变量声明:数组初始********/
char buf[10];
/******变量声明:vector初始********/
queue<string> que;
/******变量声明:记录时间********/
clock_t timeStart = clock(); //开始时间
for (long i = 0; i < q_size; i++)
{
try
{
snprintf(buf, 10, "%d", rand());
que.push(string(buf));
}
catch (exception& e)
{
cout << e.what() << endl;
cout << "Max_size:" << i << endl;
abort(); //终止
}
}
cout << "inti queue use milli-seconds:" << (clock() - timeStart) << endl; //获取初始化数组耗时
cout << "queue.size:" << que.size() << endl; //获取stack大小
cout << "queue.front:" << que.front() << endl; //获取stack栈顶元素
cout << "queue.back:" << que.back() << endl; //获取stack栈顶元素
que.pop(); //出栈一个元素
cout << "queue.size:" << que.size() << endl; //获取stack大小
cout << "queue.top:" << que.front() << endl; //获取栈顶尾元素
cout << "queue.back:" << que.back() << endl; //获取stack栈顶元素
}
}