温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C++中有哪些模板类

发布时间:2021-07-03 12:01:30 来源:亿速云 阅读:555 作者:Leah 栏目:互联网科技
# C++中有哪些模板类

## 引言

模板类是C++泛型编程的核心特性之一,它允许开发者编写与数据类型无关的代码。通过模板类,我们可以创建可重用的数据结构或算法,适用于多种数据类型而无需重复编写代码。本文将详细介绍C++中常见的模板类及其应用场景。

---

## 标准模板库(STL)中的模板类

### 1. 容器类模板

#### 序列容器
- **`std::vector<T>`**  
  动态数组,支持随机访问和动态扩容。
  ```cpp
  std::vector<int> vec = {1, 2, 3};
  • std::list<T>
    双向链表,支持高效插入/删除。

    std::list<std::string> names = {"Alice", "Bob"};
    
  • std::deque<T>
    双端队列,支持首尾快速操作。

    std::deque<double> values = {3.14, 2.71};
    

关联容器

  • std::set<T> / std::multiset<T>
    有序集合(允许重复值用multiset)。

    std::set<int> uniqueNumbers = {5, 3, 5}; // 存储 {3, 5}
    
  • std::map<K, V> / std::multimap<K, V>
    键值对映射(允许重复键用multimap)。

    std::map<std::string, int> scores = {{"Alice", 90}};
    

无序容器(C++11引入)

  • std::unordered_set<T>
    基于哈希表的集合。
  • std::unordered_map<K, V>
    哈希映射,提供平均O(1)复杂度。

2. 适配器类模板

  • std::stack<T>
    后进先出(LIFO)栈,默认基于deque

    std::stack<int> s; s.push(42);
    
  • std::queue<T>
    先进先出(FIFO)队列。

  • std::priority_queue<T>
    优先队列(默认最大堆)。


3. 智能指针模板(C++11起)

  • std::unique_ptr<T>
    独占所有权的智能指针。

    auto ptr = std::make_unique<int>(10);
    
  • std::shared_ptr<T>
    共享所有权,引用计数。

  • std::weak_ptr<T>
    解决shared_ptr循环引用问题。


其他重要模板类

1. 数值处理类

  • std::complex<T>
    复数模板类(Tfloat/double等)。

    std::complex<double> z(1.0, 2.0); // 1 + 2i
    
  • std::valarray<T>
    用于高性能数值计算。

2. 字符串处理

  • std::basic_string<CharT>
    std::string实际上是std::basic_string<char>的别名。

3. 工具类模板

  • std::pair<T1, T2>
    存储两个异构值。

    std::pair<int, std::string> p(1, "one");
    
  • std::tuple<T...>(C++11)
    扩展版pair,支持任意数量元素。


自定义模板类示例

开发者可以定义自己的模板类:

template <typename T>
class Box {
private:
    T content;
public:
    void set(const T& value) { content = value; }
    T get() const { return content; }
};

Box<std::string> stringBox;
stringBox.set("Hello Templates!");

模板类的优势与局限

优势

  • 代码复用:同一逻辑适用于不同数据类型。
  • 类型安全:编译时类型检查。
  • 性能:无运行时开销(编译时实例化)。

局限

  • 编译时间:模板实例化可能增加编译时间。
  • 错误信息:模板错误可能难以理解。

总结

C++中的模板类广泛存在于STL和语言核心中,包括容器、智能指针、数值工具等。掌握这些模板类能显著提升代码的灵活性和效率。随着C++标准的演进(如C++20的Concepts),模板编程将进一步增强类型约束和可读性。

注:本文示例基于C++17标准,部分特性可能需要较新编译器支持。 “`

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c++
AI