diff --git a/main.cpp b/main.cpp index d76cce7..944b460 100644 --- a/main.cpp +++ b/main.cpp @@ -1,8 +1,9 @@ #include #include #include - +#include // 请修复这个函数的定义:10 分 +template std::ostream &operator<<(std::ostream &os, std::vector const &a) { os << "{"; for (size_t i = 0; i < a.size(); i++) { @@ -16,19 +17,48 @@ std::ostream &operator<<(std::ostream &os, std::vector const &a) { // 请修复这个函数的定义:10 分 template -std::vector operator+(std::vector const &a, std::vector const &b) { +auto operator+(std::vector const &a, std::vector const &b) { // 请实现列表的逐元素加法!10 分 // 例如 {1, 2} + {3, 4} = {4, 6} + using T0 = decltype(T1{} + T2{}); + std::vector res; + size_t size = std::min({ a.size(),b.size() }); + res.reserve(size); + for(size_t i = 0;i std::variant operator+(std::variant const &a, std::variant const &b) { // 请实现自动匹配容器中具体类型的加法!10 分 + return std::visit([](auto const &a, auto const &b){ + return std::variant{a+b}; + }, a, b); +} + +template || std::is_same_v, bool> = true> +auto operator+(std::variant const& a, T3 const &b) { + // 请实现自动匹配容器中具体类型的加法!10 分 + return std::variant{b} + a; +} + +template || std::is_same_v, bool> = true> + auto operator+(T3 const& b, std::variant const& a) { + // 请实现自动匹配容器中具体类型的加法!10 分 + return std::variant{b} + a; } template std::ostream &operator<<(std::ostream &os, std::variant const &a) { // 请实现自动匹配容器中具体类型的打印!10 分 + std::visit([&](auto const &a){ + os<, std::vector> d = c; std::variant, std::vector> e = a; - d = d + c + e; + d = c + d + e; // 应该输出 {9.28, 17.436, 7.236} std::cout << d << std::endl;