#pragma once #include #include #include #include #include #include namespace operators { template T mul(T a, T b) { return 0; // 请修改这里的return语句 } template T id(T a) { return 0; // 请修改这里的return语句 } template T add(T a, T b) { return 0; // 请修改这里的return语句 } template T neg(T a) { return 0; // 请修改这里的return语句 } template float lt(T a, T b) { return 0.0; // 请修改这里的return语句 } template float eq(T a, T b) { return 0.0; // 请修改这里的return语句 } template T max(T a, T b) { return 0; // 请修改这里的return语句 } template auto map(const std::vector& vec, F func) -> std::vector()))> { std::vector()))> result; result.reserve(vec.size()); std::transform(vec.begin(), vec.end(), std::back_inserter(result), func); return result; } template auto zipWith(const std::vector& vec1, const std::vector& vec2, F func) -> std::vector(), std::declval()))> { if (vec1.size() != vec2.size()) { // 我们已经在这里throw一个异常 throw std::invalid_argument("Vectors must have the same size"); } // 请在这里补全其他部分 // 提醒:可以使用push_back函数向vector添加元素 // 再给你降一点难度:这里需要仿照map函数神明一个result变量。 return std::vector(), std::declval()))>(1); // 这里记得改掉,改成result } template auto reduce(const std::vector& vec, T init, F func) -> T { return std::accumulate(vec.begin(), vec.end(), init, func); } float is_close(float x, float y); float sigmoid(float x); float relu(float x); float inv(float x); float inv_back(float x, float d); float relu_back(float x, float d); auto sumList(const std::vector& vec) -> float; auto prodList(const std::vector& vec) -> float; auto addLists(const std::vector& vec1, const std::vector& vec2) -> std::vector; auto negList(const std::vector& vec) -> std::vector; }