C++ - 模板和数据类型
C++ - Templates and Data Types
我是 C++ 的新手,正在尝试创建一个可以接受任何输入的 "Generic Class"。
我需要一种方法来将我的 class 接收到的任何输入存储在数组或向量中。然而,我正在努力弄清楚如何做到这一点。
我试图在我的 .cpp 文件中这样做:
template<typename T> T data[5];
template<typename T> vector<T> vect;
这是我的头文件的样子:
#include <vector>
using namespace std;
template <class T> class Stack {
public:
void push(T x);
T peek();
T pop();
int size();
bool contains();
private:
vector<T> data;
};
但这显然是行不通的,我被告知我正在做的事情是不可能的?我如何才能创建一个数组或向量来存储我的 class 收到的任何内容?
我对此很陌生,所以对于愚蠢的错误和/或误解表示歉意。
试试这个。我在这里使用 vector
来存储数据。将其存储在 .cpp
文件中并编译和执行。
你有那些函数声明。您将在此处获得函数体。
#include<iostream>
#include<vector>
using namespace std;
template <class T>
class Stack{
private:
vector<T> elems;
public:
void push(T);
T pop();
T peek();
};
template<class T>
void Stack<T>:: push(T obj){
elems.push_back(obj);
}
template<class T>
T Stack<T>::pop(){
if(!elems.empty()){
T temp = elems.back();
elems.pop_back();
return temp;
}
}
template<class T>
T Stack<T>::peek(){
if(!elems.empty())
return elems.back();
}
int main(){
Stack<float> S;
S.push(5.42);
S.push(3.123);
S.push(7.1);
cout << S.pop() << endl;
S.pop();
cout << S.peek() << endl;
return 0;
}
输出
7.1
5.42
我是 C++ 的新手,正在尝试创建一个可以接受任何输入的 "Generic Class"。
我需要一种方法来将我的 class 接收到的任何输入存储在数组或向量中。然而,我正在努力弄清楚如何做到这一点。
我试图在我的 .cpp 文件中这样做:
template<typename T> T data[5];
template<typename T> vector<T> vect;
这是我的头文件的样子:
#include <vector>
using namespace std;
template <class T> class Stack {
public:
void push(T x);
T peek();
T pop();
int size();
bool contains();
private:
vector<T> data;
};
但这显然是行不通的,我被告知我正在做的事情是不可能的?我如何才能创建一个数组或向量来存储我的 class 收到的任何内容?
我对此很陌生,所以对于愚蠢的错误和/或误解表示歉意。
试试这个。我在这里使用 vector
来存储数据。将其存储在 .cpp
文件中并编译和执行。
你有那些函数声明。您将在此处获得函数体。
#include<iostream>
#include<vector>
using namespace std;
template <class T>
class Stack{
private:
vector<T> elems;
public:
void push(T);
T pop();
T peek();
};
template<class T>
void Stack<T>:: push(T obj){
elems.push_back(obj);
}
template<class T>
T Stack<T>::pop(){
if(!elems.empty()){
T temp = elems.back();
elems.pop_back();
return temp;
}
}
template<class T>
T Stack<T>::peek(){
if(!elems.empty())
return elems.back();
}
int main(){
Stack<float> S;
S.push(5.42);
S.push(3.123);
S.push(7.1);
cout << S.pop() << endl;
S.pop();
cout << S.peek() << endl;
return 0;
}
输出
7.1
5.42