首页 > 后端开发 > C++ > 正文

C++如何使用模板实现容器类

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

c++如何使用模板实现容器类

在C++中,使用模板实现容器类可以让你编写通用、类型安全且可复用的数据结构。通过模板,容器可以支持任意数据类型,比如 intdouble 或自定义类类型。下面以一个简单的动态数组容器(类似 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++免费学习笔记(深入)”;

AiPPT模板广场
AiPPT模板广场

AiPPT模板广场-PPT模板-word文档模板-excel表格模板

AiPPT模板广场 147
查看详情 AiPPT模板广场
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::vectorstd::list 等,它们经过高度优化并具备完善的异常处理机制。

以上就是C++如何使用模板实现容器类的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门推荐
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号