# 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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。