1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
| #include <iostream> #include <span> #include <vector> #include <array> #include <algorithm> #include <numeric>
template<typename T> void processData(std::span<T> data) { std::cout << "Processing " << data.size() << " elements:\n"; if (!data.empty()) { auto sum = std::accumulate(data.begin(), data.end(), T{}); auto avg = sum / data.size(); std::cout << " Sum: " << sum << ", Average: " << avg << "\n"; auto max_it = std::max_element(data.begin(), data.end()); std::cout << " Max: " << *max_it << "\n"; } }
template<typename T> class Matrix { private: std::vector<T> data_; size_t rows_, cols_; public: Matrix(size_t rows, size_t cols) : data_(rows * cols), rows_(rows), cols_(cols) {} std::span<T> getRow(size_t row) { return std::span<T>(data_.data() + row * cols_, cols_); } std::span<T> getData() { return std::span<T>(data_); } void fill(T value) { std::fill(data_.begin(), data_.end(), value); } };
template<typename T> void safeArrayProcess(std::span<T> arr) { for (size_t i = 0; i < arr.size(); ++i) { arr[i] *= 2; } if (arr.size() > 2) { auto middle = arr.subspan(1, arr.size() - 2); std::cout << "Middle elements: "; for (const auto& val : middle) { std::cout << val << " "; } std::cout << "\n"; } }
int main() { std::vector<int> vec = {1, 2, 3, 4, 5}; std::array<int, 5> arr = {6, 7, 8, 9, 10}; int c_array[] = {11, 12, 13, 14, 15}; std::cout << "=== 统一处理不同容器 ===\n"; processData<int>(vec); processData<int>(arr); processData<int>(c_array); std::cout << "\n=== 矩阵操作示例 ===\n"; Matrix<double> matrix(3, 4); matrix.fill(1.5); for (size_t i = 0; i < 3; ++i) { auto row = matrix.getRow(i); std::cout << "Row " << i << ": "; for (const auto& val : row) { std::cout << val << " "; } std::cout << "\n"; } std::cout << "\n=== 安全数组处理 ===\n"; std::vector<int> test_data = {1, 2, 3, 4, 5, 6}; std::cout << "Before: "; for (const auto& val : test_data) { std::cout << val << " "; } std::cout << "\n"; safeArrayProcess<int>(test_data); std::cout << "After: "; for (const auto& val : test_data) { std::cout << val << " "; } std::cout << "\n"; return 0; }
|