設計類模板 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。T 需滿足相應概念(LessThanComparable、Addable 等)。教學示例:Warting C++ 類模板數組操作
C++ 類模板 + STL 算法 = 類型安全、高性能、可復用的泛型容器。掌握 std::sort、std::find、std::accumulate 等算法,是現代 C++ 泛型編程的基石。