From 934b56779831bcbfe84fb0c7162a021916b5275d Mon Sep 17 00:00:00 2001 From: knowledgaction <1113798773@qq.com> Date: Mon, 10 Jul 2023 15:37:49 +0800 Subject: [PATCH 1/2] Update main.cpp MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit hw3,磕磕绊绊,不太熟练地完成了 --- main.cpp | 39 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/main.cpp b/main.cpp index d76cce7..32b77e7 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,49 @@ std::ostream &operator<<(std::ostream &os, std::vector const &a) { } // 请修复这个函数的定义:10 分 -template -std::vector operator+(std::vector const &a, std::vector const &b) { +template // 第一个加法, vector相加 +std::vector> operator+(std::vector const &a, std::vector const &b) { // 请实现列表的逐元素加法!10 分 // 例如 {1, 2} + {3, 4} = {4, 6} + std::vector> sum; + size_t N = std::min(a.size(), b.size()); + for (size_t i=0;i +template // 第二个加法, variant+variant std::variant operator+(std::variant const &a, std::variant const &b) { // 请实现自动匹配容器中具体类型的加法!10 分 + + return std::visit([&](const auto& i, const auto& j)->std::variant {return i + j;}, a, b); +} + +template // 第二个加法, variant+vector +std::variant operator+(std::variant const &a, T2 const &b) { + // 请实现自动匹配容器中具体类型的加法!10 分 + + return a + std::variant{b}; +} + +template // 第二个加法, vector+variant +std::variant operator+(T1 const &a, std::variant const &b) { + // 请实现自动匹配容器中具体类型的加法!10 分 + return b + std::variant{a}; } template std::ostream &operator<<(std::ostream &os, std::variant const &a) { // 请实现自动匹配容器中具体类型的打印!10 分 + std::visit([&](const auto& i){std::cout << i << std::endl;}, a); + return os; +} + +template +std::ostream &operator<<(std::ostream &os, std::variant const &args){ + std::visit([&](const auto& i){std::cout << i << std::endl;}, args); + return os; } int main() { @@ -51,5 +81,8 @@ int main() { // 应该输出 {9.28, 17.436, 7.236} std::cout << d << std::endl; + std::variant> temp{666}; + std::cout << temp << std::endl; + return 0; } From 301c9a44675205cc5e0cdd0f08a85d1f818c04b6 Mon Sep 17 00:00:00 2001 From: knowledgaction <1113798773@qq.com> Date: Mon, 10 Jul 2023 16:32:36 +0800 Subject: [PATCH 2/2] Update main.cpp --- main.cpp | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/main.cpp b/main.cpp index 32b77e7..c6e9b4d 100644 --- a/main.cpp +++ b/main.cpp @@ -48,13 +48,6 @@ std::variant operator+(T1 const &a, std::variant const &b) { return b + std::variant{a}; } -template -std::ostream &operator<<(std::ostream &os, std::variant const &a) { - // 请实现自动匹配容器中具体类型的打印!10 分 - std::visit([&](const auto& i){std::cout << i << std::endl;}, a); - return os; -} - template std::ostream &operator<<(std::ostream &os, std::variant const &args){ std::visit([&](const auto& i){std::cout << i << std::endl;}, args); @@ -81,7 +74,7 @@ int main() { // 应该输出 {9.28, 17.436, 7.236} std::cout << d << std::endl; - std::variant> temp{666}; + std::variant temp{666}; std::cout << temp << std::endl; return 0;