C++模板
C++模板
模板是C++最有特色的语法,也是最复杂的语法。它将类型看作一种参数来进行编程。
模板函数
参见:C++:模板函数
模板类
class Stack {
int *data_;
int size_;
int capacity_;
public:
Stack(int capacity) {
capacity_ = capacity;
size_ = 0;
data_ = new int[capacity_];
}
~Stack() {
delete[] data_;
}
void push(int t) {
data_[size_++] = t;
}
void pop() {
size_--;
}
int top() const{
return data_[size_-1];
}
bool empty() const{
return size_ == 0;
}
int size() const {
return size_;
}
};这个栈只能用来存放int不能存放其他东西,为了让他能够存放其他东西,我们把int参数化
template<class T>
class Stack {
T *data_;
int size_;
int capacity_;
public:
Stack(int capacity) {
capacity_ = capacity;
size_ = 0;
data_ = new T[capacity_];
}
~Stack() {
delete[] data_;
}
void push(const T &t) {
data_[size_++] = t;
}
void pop() {
size_--;
}
T top() const{
return data_[size_-1];
}
bool empty() const{
return size_ == 0;
}
int size() const {
return size_;
}
};有了这个模板类以后,我们可以定义存放各种类型元素的栈:
int main() {
Stack<int> s;
Stack<double> t;
Stack<complex> u;
}练习:写一个Array类,可以存放任何类型元素的数组
系统内置的模板库
线性容器:vector、deque、list,关联容器:set、multiset、map、multimap
适配器:stack、queue、priority_queue
迭代子:类似指针
算法:sort等
#include <vector>
#include <iostream>
using namespace std;
void print(vector<int> &v) {
for(int i = 0; i < v.size(); i++)
cout << v[i];
}
int main() {
vector<int> v;
v.push_back(3);
v.push_back(2);
v.push_back(1);
print(v);
v.pop_back();
print(v);
v.insert(v.begin(), 4);
print(v);
v.insert(v.end(), 5);
print(v);
v.erase(v.begin());
print(v);
}void print(vector<int>::iterator begin, vector<int>::iterator end) {
while(begin != end) {
cout << *begin ;
begin++;
}
}
int main() {
vector<int> v;
v.push_back(3);
v.push_back(2);
v.push_back(1);
print(v.begin(), v.end());
}