diff --git a/main.cpp b/main.cpp index d76cce7..e94fac0 100644 --- a/main.cpp +++ b/main.cpp @@ -3,7 +3,8 @@ #include // 请修复这个函数的定义:10 分 -std::ostream &operator<<(std::ostream &os, std::vector const &a) { +template +auto &operator<<(std::ostream &os, std::vector const &a) { os << "{"; for (size_t i = 0; i < a.size(); i++) { os << a[i]; @@ -16,19 +17,38 @@ 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; + for (size_t i = 0; i < std::min(a.size(), b.size()); i++) + res.push_back(a[i]+b[i]); + return res; } template -std::variant operator+(std::variant const &a, std::variant const &b) { +auto operator+(std::variant const &a, std::variant const &b) { // 请实现自动匹配容器中具体类型的加法!10 分 + return std::visit([] (auto const &a, auto const &b) -> std::variant { + return a + b; + }, a, b); } +// 重载+与参数顺序有关, 为了使得main函数中的d+c+e成功运行, 重载一个新的+ template -std::ostream &operator<<(std::ostream &os, std::variant const &a) { +auto operator+(std::variant const &b, T2 const &a) { + std::variant res = a; + return res + b; +} + +template +auto &operator<<(std::ostream &os, std::variant const &a) { // 请实现自动匹配容器中具体类型的打印!10 分 + std::visit([&] (auto const &a) { + os << a; + }, a); + return os; } int main() {