使用模板可实现通用容器类,如MyVector支持任意类型。通过template<typename T>定义泛型类,封装动态数组,提供push_back、pop_back、下标访问等操作,并在使用时自动实例化为具体类型,兼具类型安全与复用性,但实际开发中应优先采用标准库容器。

在C++中,使用模板实现容器类可以让你编写通用、类型安全且可复用的数据结构。通过模板,容器可以支持任意数据类型,比如 int、double 或自定义类类型。下面以一个简单的动态数组容器(类似 std::vector 的简化版)为例,说明如何使用模板构建一个通用容器。
使用 template<typename T> 声明一个泛型类,T 代表用户将要存储的类型。
template <typename T>
class MyVector {
private:
T* data; // 指向动态数组的指针
size_t size; // 当前元素个数
size_t capacity; // 当前容量
<pre class='brush:php;toolbar:false;'>void resize(); // 扩容函数public: MyVector(); ~MyVector();
void push_back(const T& value); void pop_back(); T& operator[](size_t index); const T& operator[](size_t index) const; size_t getSize() const; bool isEmpty() const;
};
所有成员函数都需要在类外加上 template<typename T> 前缀,并注意处理内存分配与异常安全。
立即学习“C++免费学习笔记(深入)”;
template <typename T>
MyVector<T>::MyVector() : data(nullptr), size(0), capacity(0) {}
<p>template <typename T>
MyVector<T>::~MyVector() {
delete[] data;
}</p><p>template <typename T>
void MyVector<T>::push_back(const T& value) {
if (size == capacity) {
resize();
}
data[size++] = value;
}</p><p>template <typename T>
void MyVector<T>::resize() {
capacity = (capacity == 0) ? 1 : capacity <em> 2;
T</em> new_data = new T[capacity];
for (size_t i = 0; i < size; ++i) {
new_data[i] = data[i]; // 调用 T 的赋值操作
}
delete[] data;
data = new_data;
}</p><p>template <typename T>
T& MyVector<T>::operator[](size_t index) {
return data[index];
}</p><p>template <typename T>
const T& MyVector<T>::operator[](size_t index) const {
return data[index];
}</p><p>template <typename T>
size_t MyVector<T>::getSize() const {
return size;
}</p><p>template <typename T>
bool MyVector<T>::isEmpty() const {
return size == 0;
}</p>实例化时指定具体类型,编译器会自动生成对应版本的类。
#include <iostream>
<p>int main() {
MyVector<int> vec;
vec.push_back(10);
vec.push_back(20);
vec.push_back(30);</p><pre class='brush:php;toolbar:false;'>for (size_t i = 0; i < vec.getSize(); ++i) {
std::cout << vec[i] << " ";
}
std::cout << std::endl;
MyVector<std::string> strVec;
strVec.push_back("Hello");
strVec.push_back("World");
std::cout << strVec[0] << " " << strVec[1] << std::endl;
return 0;}
基本上就这些。只要掌握模板语法和内存管理,就能写出灵活高效的通用容器。注意:真实项目中建议优先使用标准库容器,如 std::vector、std::list 等,它们经过高度优化并具备完善的异常处理机制。
以上就是C++如何使用模板实现容器类的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号