From 2ea9149edac91597332849627f098beaf24d5b3b Mon Sep 17 00:00:00 2001 From: imcuna <44642883+imcuna@users.noreply.github.com> Date: Sun, 30 Jan 2022 17:23:51 +0800 Subject: [PATCH] hw03 hw03 --- main.cpp | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/main.cpp b/main.cpp index d76cce7..bbb8261 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++) { @@ -16,19 +17,40 @@ 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 ret; + for (size_t i = 0; i < std::min(a.size(), b.size()); i++) { + ret.push_back(a[i] + b[i]); + } + return ret; } template 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::ostream &operator<<(std::ostream &os, std::variant const &a) { +template +std::ostream &operator<<(std::ostream &os, std::variant const &a) { // 请实现自动匹配容器中具体类型的打印!10 分 + std::visit([&](auto const& x) { + os << x; + }, a); + + return os; +} + +template +auto operator+(std::variant const& v, T2 const& x) { + return std::visit([&](auto const& a) { + return std::variant{a + x}; + }, v); } int main() {