您好,登录后才能下订单哦!
# 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}};
std::unordered_set<T>
std::unordered_map<K, V>
std::stack<T>
后进先出(LIFO)栈,默认基于deque
。
std::stack<int> s; s.push(42);
std::queue<T>
先进先出(FIFO)队列。
std::priority_queue<T>
优先队列(默认最大堆)。
std::unique_ptr<T>
独占所有权的智能指针。
auto ptr = std::make_unique<int>(10);
std::shared_ptr<T>
共享所有权,引用计数。
std::weak_ptr<T>
解决shared_ptr
循环引用问题。
std::complex<T>
复数模板类(T
为float
/double
等)。
std::complex<double> z(1.0, 2.0); // 1 + 2i
std::valarray<T>
用于高性能数值计算。
std::basic_string<CharT>
std::string
实际上是std::basic_string<char>
的别名。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标准,部分特性可能需要较新编译器支持。 “`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。