From e251ac07cfa7e74899cca1aadf6d654bb6b09bc8 Mon Sep 17 00:00:00 2001 From: dgi <1097190201@qq.com> Date: Tue, 8 Feb 2022 00:09:10 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90hw03,=E5=AD=A6=E4=B9=A0?= =?UTF-8?q?=E5=87=BD=E6=95=B0=E6=A8=A1=E6=9D=BF,vist,variant=E7=89=B9?= =?UTF-8?q?=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.cpp | 50 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 47 insertions(+), 3 deletions(-) diff --git a/main.cpp b/main.cpp index d76cce7..828b6ab 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,55 @@ 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& t1,auto const& t2){ + return std::variant{t1+t2}; + },a , b); } template -std::ostream &operator<<(std::ostream &os, std::variant const &a) { +auto operator+(std::variant const &a, T1 const &b) { + // variant + vector + return a + std::variant{b}; +} + +template +auto operator+(std::variant const &a, T2 const &b) { + // variant + vector + // 为什么 vector const& b - > T2 const &b ? T2 is more generic type + return a + std::variant{b}; +} + + +//template +//std::ostream &operator<<(std::ostream &os, std::variant const &a) { +// // 请实现自动匹配容器中具体类型的打印!10 分 +// std::visit([&](auto const& t){ +// os< +std::ostream &operator<<(std::ostream &os, std::variant const &a) { // 请实现自动匹配容器中具体类型的打印!10 分 + std::visit([&](auto const& t){ + os<,std::string,std::vector> test_val; + test_val = c; + std::cout << test_val << std::endl; + test_val = "i am a string"; + std::cout << test_val; + return 0; }