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

C++ 類模板實現數組排序、查找、求和:泛型編程實戰

     編輯:程式設計綜合問答

需求

設計類模板 Array 支援任意類型 T 的數組:排序、查找、求和。

完整實現

#include <algorithm>
#include <functional>
#include <numeric>
#include <vector>

template <typename T>
class Array {
    std::vector data;
public:
    Array(std::initializer_list init) : data(init) {}
    Array(size_t n, const T& val = T()) : data(n, val) {}

    // 排序:預設 operator<,可自定義比較器
    void sort(std::function cmp = std::less()) {
        std::sort(data.begin(), data.end(), cmp);
    }

    // 查找:返回索引,未找到 -1
    int find(const T& value) const {
        auto it = std::find(data.begin(), data.end(), value);
        return it != data.end() ? it - data.begin() : -1;
    }

    // 二分查找(需已排序)
    int binaryFind(const T& value) const {
        auto it = std::lower_bound(data.begin(), data.end(), value);
        return (it != data.end() && *it == value) ? it - data.begin() : -1;
    }

    // 求和:需 T 支持 operator+
    T sum() const {
        return std::accumulate(data.begin(), data.end(), T());
    }

    // 訪問器
    T& operator[](size_t i) { return data[i]; }
    const T& operator[](size_t i) const { return data[i]; }
    size_t size() const { return data.size(); }
};

使用示例

int main() {
    Array arr = {5, 2, 8, 1, 9};
    arr.sort();                    // 1,2,5,8,9
    std::cout << arr.find(8) << '\n';      // 3
    std::cout << arr.sum() << '\n';        // 25

    Array strs = {"delta", "alpha", "epsilon"};
    strs.sort([](const auto& a, const auto& b){ return a.size() < b.size(); });
    // 按長度排序: alpha, delta, epsilon
}

關鍵點

  • std::vector 管理動態記憶體,避免手動 new/delete。
  • 排序/查找/求和委託 STL 算法,零成本抽象。
  • 模板參數 T 需滿足相應概念(LessThanComparable、Addable 等)。

參考資源

教學示例:Warting C++ 類模板數組操作

總結

C++ 類模板 + STL 算法 = 類型安全、高性能、可復用的泛型容器。掌握 std::sort、std::find、std::accumulate 等算法,是現代 C++ 泛型編程的基石。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved