diff --git a/main.cpp b/main.cpp index d76cce7..4003850 100644 --- a/main.cpp +++ b/main.cpp @@ -3,6 +3,7 @@ #include // 请修复这个函数的定义:10 分 +template std::ostream &operator<<(std::ostream &os, std::vector const &a) { os << "{"; for (size_t i = 0; i < a.size(); i++) { @@ -15,20 +16,52 @@ std::ostream &operator<<(std::ostream &os, std::vector const &a) { } // 请修复这个函数的定义:10 分 -template +template std::vector operator+(std::vector const &a, std::vector const &b) { // 请实现列表的逐元素加法!10 分 // 例如 {1, 2} + {3, 4} = {4, 6} + std::vector res; + + size_t len = a.size() < b.size() ? a.size() : b.size(); + for(size_t i=0; i 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 +auto operator+(std::variant const &a, std::vector const &b){ + return std::visit([&](auto const &vec){ + return vec + b; + }, a); +} + +template +auto operator+(std::vector const &a, std::variant const &b){ + return b + a; } template std::ostream &operator<<(std::ostream &os, std::variant const &a) { // 请实现自动匹配容器中具体类型的打印!10 分 + os << "{"; + std::visit([&](auto const &vec){ + for (size_t i = 0; i < vec.size(); i++) { + os << vec[i]; + if (i != vec.size() - 1) + os << ", "; + } + }, a); + os << "}"; + return os; } int main() {