温馨提示×

温馨提示×

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

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

C++中有哪些模板类

发布时间:2021-07-03 12:01:30 来源:亿速云 阅读:553 作者: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