编程实例怎么写模板

时间:2025-01-25 08:57:03 网络游戏

编写编程实例的模板通常涉及以下步骤:

定义模板

使用`template`关键字来定义模板,并指定模板参数。模板参数可以是类型、整型常量等。例如,定义一个简单的动态数组模板类:

```cpp

template

class DynamicArray {

private:

T* data; // 动态数组指针

size_t size; // 当前数组大小

size_t capacity; // 数组容量

// 扩容函数

void resize() {

capacity *= 2;

T* new_data = new T[capacity];

for (size_t i = 0; i < size; ++i) {

new_data[i] = data[i];

}

delete[] data;

data = new_data;

}

public:

DynamicArray(size_t initial_capacity = 10) : size(0), capacity(initial_capacity) {

data = new T[capacity];

}

~DynamicArray() {

delete[] data;

}

void push_back(const T& item) {

if (size == capacity) {

resize();

}

data[size++] = item;

}

T& operator[](int i) {

return data[i];

}

const T& operator[](int i) const {

return data[i];

}

size_t getSize() const {

return size;

}

};

```

使用模板

在主函数或其他代码中,可以通过指定模板参数来使用模板类或函数。例如,使用上述`DynamicArray`模板类:

```cpp

int main() {

DynamicArray intArray;

intArray.push_back(1);

intArray.push_back(2);

intArray.push_back(3);

for (size_t i = 0; i < intArray.getSize(); ++i) {

std::cout << intArray[i] << " ";

}

std::cout << std::endl;

return 0;

}

```

模板特化和偏特化

如果需要对特定类型进行特殊处理,可以使用模板特化或偏特化。例如,为`std::string`类型特化`DynamicArray`:

```cpp

template <>

class DynamicArray {

private:

std::string* data;

size_t size;

size_t capacity;

void resize() {

capacity *= 2;

std::string* new_data = new std::string[capacity];

for (size_t i = 0; i < size; ++i) {

new_data[i] = data[i];

}

delete[] data;

data = new_data;

}

public:

DynamicArray(size_t initial_capacity = 10) : size(0), capacity(initial_capacity) {

data = new std::string[capacity];

}

~DynamicArray() {

delete[] data;

}

void push_back(const std::string& item) {

if (size == capacity) {

resize();

}

data[size++] = item;

}

std::string& operator[](int i) {

return data[i];

}

const std::string& operator[](int i) const {

return data[i];

}

size_t getSize() const {

return size;

}

};

```

类型推导

C++11引入了类型推导,可以使用`auto`关键字来自动推导模板参数的类型。例如: