<4> C++纯虚类--测试数据运行速度 2021-05-27

//使用纯虚类实现接口 
//使用两种不同底层的数据结构来实现栈的操作
//并测试其数据运行速度。 

#include <iostream>
#include <vector>
#include <list>
#include <stdlib.h>
#include <ctime>
using namespace std;
//声明一个纯虚类实现接口 规范了实现类的方法 
template <typename T>
class MyStack
{
public:
	virtual T top()=0;
	virtual int size()=0;
	virtual void push(T e)=0;
	virtual T pop()=0;
	virtual bool empty()=0;
};
//通过类的继承来实现父类的方法 
template <typename T>
class VectorStack:public MyStack<T>
{
public:
	T top() override
	{
		return vec.back();
	}
	int size() override
	{
		return vec.size();
	}
	void push(T e) override
	{
		vec.push_back(e);
	}
	T pop() override
	{
		T ret = vec.back();
		vec.pop_back();
		return ret;
	}
	bool empty() override
	{
		return vec.empty();
	}
private:
	vector<T> vec;
};

template <typename T>
class ListStack:public MyStack<T>
{
public:
	T top() override
	{
		return li.back();
	}
	int size() override
	{
		return li.size();
	}
	void push(T e) override
	{
		li.push_back(e);
	}
	T pop() override
	{
		T ret = li.back();
		li.pop_back();
		return ret;
	}
	bool empty() override
	{
		return li.empty();
	}
private:
	list<T> li;
};

template <typename T>
double Test_Stack(MyStack<T> &stack,int iCount)
{
	clock_t startTime,endTime;
	srand(time(NULL)); 
	startTime = clock();
	for(int i=0;i<iCount;i++)
	{
		stack.push(rand()%iCount);
	}
	for(int i=0;i<iCount;i++)
	{
		stack.pop();
	}
	endTime = clock();
	return (endTime - startTime)/1000.0;
}

int main(int argc, char *argv[])
{
	VectorStack<int> s1;
	cout<<"vectorStack using time: "<<Test_Stack(s1,1000000)<<" s"<<endl;
	ListStack<int> s2;
	cout<<"listStack using time: "<<Test_Stack(s2,1000000)<<" s"<<endl;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/lybc2019/article/details/117337158