首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 函數模板實現通用排序:支持任意類型、任意長度數組

     編輯:程式設計綜合問答

需求分析

  • 同一函數名對 整型、浮點型、雙精度型 等數據排序。
  • 數據個數 n 未知,需動態確定。
  • 使用 函數模板 實現泛型邏輯。

核心代碼實現

#include 
#include 
#include  // std::sort

// 通用排序模板
template 
void genericSort(std::vector& arr) {
    std::sort(arr.begin(), arr.end(), [](const T& a, const T& b) {
        return a < b; // 要求類型支持 operator<
    });
}

// 讀取未知長度輸入
template 
std::vector readInput() {
    std::vector data;
    T value;
    std::cout << "請輸入數據(非數字結束):";
    while (std::cin >> value) {
        data.push_back(value);
    }
    std::cin.clear(); // 清除錯誤狀態
    std::cin.ignore(std::numeric_limits::max(), '\n');
    return data;
}

int main() {
    // 整型排序
    auto intVec = readInput();
    genericSort(intVec);
    std::cout << "整型排序結果:";
    for (auto v : intVec) std::cout << v << ' ';
    std::cout << '\n';

    // 雙精度排序
    auto doubleVec = readInput();
    genericSort(doubleVec);
    std::cout << "雙精度排序結果:";
    for (auto v : doubleVec) std::cout << v << ' ';
    std::cout << '\n';

    return 0;
}

關鍵點解析

  1. 模板參數推導:編譯器根據實參類型自動實例化 genericSort、genericSort 等。
  2. 動態容器:使用 std::vector 替代定長數組,自動管理內存、支持任意長度。
  3. 比較邏輯:Lambda [](const T& a, const T& b){ return a < b; } 要求類型重載 operator<,內置類型天然支持,自定義結構體需自行重載。
  4. 輸入終止:非數字輸入觸發 std::cin 失效,配合 clear()/ignore() 恢復流狀態。

進階擴展

  • 支持自定義比較器:template void genericSort(std::vector&, Compare comp)。
  • 使用 std::span (C++20) 接受原始數組指針+長度,避免拷貝。
  • 並行排序:std::sort(std::execution::par, ...) 利用多核加速大數據量排序。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved