diff --git a/main.cpp b/main.cpp index d76cce7..417d414 100644 --- a/main.cpp +++ b/main.cpp @@ -1,8 +1,13 @@ +#include +#include #include +#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,21 +21,44 @@ 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{}); + size_t n = std::min(a.size(), b.size()); + std::vector c(n); + for (size_t i = 0; i < n; i++) { + c[i] = a[i] + b[i]; + } + return c; } template std::variant operator+(std::variant const &a, std::variant const &b) { // 请实现自动匹配容器中具体类型的加法!10 分 + return std::visit([&](auto const &x, auto const &y) -> std::variant{ + return x+y; + }, a, b); +} + +template ||std::is_same_v>> +std::variant operator+(std::variant const &a, T3 const &b){ + return std::visit([&](auto const &x){ + return x+b; + }, a); } template std::ostream &operator<<(std::ostream &os, std::variant const &a) { // 请实现自动匹配容器中具体类型的打印!10 分 + std::visit([&](auto const &x){ + os << x; + }, a); + return os; } + + int main() { std::vector a = {1, 4, 2, 8, 5, 7}; std::cout << a << std::endl;