From c4619fd8f86b8f4981befa54ed19b5af394781b8 Mon Sep 17 00:00:00 2001 From: pengyuzhou <760783896@qq.com> Date: Wed, 23 Mar 2022 19:11:10 +0800 Subject: [PATCH 1/2] homework3 --- main.cpp | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/main.cpp b/main.cpp index d76cce7..73a8ce9 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,35 @@ 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::variant operator+(std::variant const &a, std::variant const &b) { +auto operator+(std::variant const &a, std::variant const &b) { // 请实现自动匹配容器中具体类型的加法!10 分 + std::variant ret; + std::visit([&] (auto const &t1,auto const &t2){ + for(size_t i=0;i std::ostream &operator<<(std::ostream &os, std::variant const &a) { // 请实现自动匹配容器中具体类型的打印!10 分 + std::visit([&](auto const &t){ + std::cout< Date: Thu, 31 Mar 2022 10:02:49 +0800 Subject: [PATCH 2/2] update code --- main.cpp | 42 ++++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/main.cpp b/main.cpp index 73a8ce9..245bdfc 100644 --- a/main.cpp +++ b/main.cpp @@ -1,10 +1,10 @@ #include #include #include - +//#include // 请修复这个函数的定义:10 分 template -std::ostream &operator<<(std::ostream &os, std::vector const &a) { +std::ostream& operator<<(std::ostream& os, std::vector const& a) { os << "{"; for (size_t i = 0; i < a.size(); i++) { os << a[i]; @@ -17,41 +17,41 @@ std::ostream &operator<<(std::ostream &os, std::vector const &a) { // 请修复这个函数的定义:10 分 template -auto 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{}); + using T0 = decltype(T1{} + T2{}); std::vector ret; - for(size_t i=0;i -auto operator+(std::variant const &a, std::variant const &b) { +std::variant operator+(std::variant const& a, std::variant const& b) { // 请实现自动匹配容器中具体类型的加法!10 分 - std::variant ret; - std::visit([&] (auto const &t1,auto const &t2){ - for(size_t i=0;i ret; + std::visit([&](auto const& t1, auto const& t2) { + + ret = (t1 + t2); + }, a, b); return ret; } template -std::ostream &operator<<(std::ostream &os, std::variant const &a) { +std::ostream& operator<<(std::ostream& os, std::variant const& a) { // 请实现自动匹配容器中具体类型的打印!10 分 - std::visit([&](auto const &t){ - std::cout< a = {1, 4, 2, 8, 5, 7}; + std::vector a = { 1, 4, 2, 8, 5, 7 }; std::cout << a << std::endl; - std::vector b = {3.14, 2.718, 0.618}; + std::vector b = { 3.14, 2.718, 0.618 }; std::cout << b << std::endl; auto c = a + b; @@ -63,7 +63,9 @@ int main() { std::variant, std::vector> d = c; std::variant, std::vector> e = a; - d = d + c + e; + //std::variant, std::vector> f; + + d = d + std::variant, std::vector>(c) + e; // 应该输出 {9.28, 17.436, 7.236} std::cout << d << std::endl;