将栈设计成一个类模板,在栈中存放任意类型的数据。
时间: 2024-05-14 09:18:25 浏览: 8
好的,以下是一个简单的栈类模板的实现:
```c++
template<typename T>
class Stack {
private:
vector<T> data; // 用 vector 存放栈中的元素
public:
bool empty() const { return data.empty(); }
size_t size() const { return data.size(); }
void push(const T& val) { data.push_back(val); }
void pop() { data.pop_back(); }
T& top() { return data.back(); }
const T& top() const { return data.back(); }
};
```
这里使用了 STL 中的 vector 容器来存储栈中的元素。成员函数包括:检查栈是否为空的 empty()、返回栈的大小的 size()、将元素压入栈中的 push()、弹出栈顶元素的 pop()、返回栈顶元素的引用的 top(),以及返回栈顶元素的常引用的 top()。其中,top() 函数有两个版本,一个用于修改栈顶元素,一个用于读取栈顶元素。
相关问题
设计一个栈类模板,要求可以存放任意类型的数据,并编写测试代码。
好的,下面是栈类模板的实现及测试代码:
```cpp
#include <iostream>
#include <vector>
#include <string>
using namespace std;
template<typename T>
class Stack {
private:
vector<T> data;
public:
Stack() {}
void push(T val) {
data.push_back(val);
}
T pop() {
T val = data.back();
data.pop_back();
return val;
}
T top() {
return data.back();
}
bool empty() {
return data.empty();
}
};
int main() {
Stack<int> intStack;
intStack.push(1);
intStack.push(2);
intStack.push(3);
cout << intStack.top() << endl; // 3
intStack.pop();
cout << intStack.top() << endl; // 2
Stack<string> strStack;
strStack.push("Hello");
strStack.push("World");
cout << strStack.top() << endl; // World
strStack.pop();
cout << strStack.top() << endl; // Hello
return 0;
}
```
上面的代码定义了一个栈类模板 `Stack<T>`,其中 `T` 是任意类型的模板参数。栈内部使用 STL 中的 `vector` 实现,支持 `push`、`pop`、`top` 和 `empty` 四个操作,分别表示入栈、出栈、获取栈顶元素和判断栈是否为空。
测试代码中首先创建了一个整型栈 `intStack`,并依次将 1、2、3 入栈。然后通过 `top` 获取栈顶元素,输出 3,接着通过 `pop` 出栈一个元素,再次获取栈顶元素并输出 2。接下来创建了一个字符串栈 `strStack`,同样进行了入栈、出栈、获取栈顶元素等操作,输出结果为 "World" 和 "Hello"。
以上就是栈类模板及测试代码的实现。
c++设计一个栈类模板,要求可以存放任意类型的数据,并编写测试代码
好的,我来为您提供一个参考实现。
```c++
#include <iostream>
#include <vector>
template<typename T>
class Stack {
private:
std::vector<T> data;
public:
// 入栈
void push(T value) {
data.push_back(value);
}
// 出栈
T pop() {
if (data.empty()) {
throw std::out_of_range("Stack is empty");
}
T value = data.back();
data.pop_back();
return value;
}
// 栈顶元素
T top() const {
if (data.empty()) {
throw std::out_of_range("Stack is empty");
}
return data.back();
}
// 栈是否为空
bool empty() const {
return data.empty();
}
// 栈大小
size_t size() const {
return data.size();
}
};
int main() {
Stack<int> intStack;
intStack.push(1);
intStack.push(2);
intStack.push(3);
while (!intStack.empty()) {
std::cout << intStack.pop() << " ";
}
std::cout << std::endl;
Stack<std::string> stringStack;
stringStack.push("hello");
stringStack.push("world");
while (!stringStack.empty()) {
std::cout << stringStack.pop() << " ";
}
std::cout << std::endl;
return 0;
}
```
这里使用了 `std::vector` 作为栈的内部存储结构,并提供了常见的入栈、出栈、栈顶元素、栈是否为空、栈大小等操作。在测试代码中,我们分别创建了一个整型栈和一个字符串栈,并进行了一些基本操作的测试。