溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++中有哪些模板類

發布時間:2021-07-03 12:01:30 來源:億速云 閱讀:506 作者: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

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女