From 2ebf6f7b0c0dbc2f732322f4ab00492fd75ec9ee Mon Sep 17 00:00:00 2001 From: xhl <2682950883@qq.com> Date: Fri, 6 May 2022 10:45:29 +0800 Subject: [PATCH 1/2] finish all --- main.cpp | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 63 insertions(+), 3 deletions(-) diff --git a/main.cpp b/main.cpp index d76cce7..478e11e 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++) { @@ -14,21 +15,80 @@ std::ostream &operator<<(std::ostream &os, std::vector const &a) { return os; } -// 请修复这个函数的定义:10 分 +template +struct _if; + +template +struct _if +{ + using value = T1; +}; + +template +struct _if +{ + using value = T2; +}; + template +struct bigger_size +{ + using value = typename _if< bool(sizeof(T1)>sizeof(T2)), T1, T2 >::value; +}; + +// 请修复这个函数的定义:10 分 +template ::value> std::vector operator+(std::vector const &a, std::vector const &b) { // 请实现列表的逐元素加法!10 分 // 例如 {1, 2} + {3, 4} = {4, 6} + const size_t s = std::min(a.size(), b.size()); + std::vector v(s); + for(int i=0; i +std::variant +operator+(std::variant const &a, T2 const& b){ + std::variant v; + if(a.index()==0) + v = std::get<0>(a) + b; + else + v = std::get<1>(a) + b; + return v; +} + +template +std::variant +operator+(std::variant const &a, T1 const& b){ + std::variant v; + if(a.index()==0) + v = std::get<0>(a) + b; + else + v = std::get<1>(a) + b; + return v; } template std::variant operator+(std::variant const &a, std::variant const &b) { // 请实现自动匹配容器中具体类型的加法!10 分 + std::variant v; + if(b.index()==0) + v = a + std::get<0>(b); + else + v = a + std::get<1>(b); + return v; } -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([&](const auto& t){ + os << t; + }, a); + return os; } int main() { From c02d0ed35bf497c0c1913e9b6d1f79141eea1bad Mon Sep 17 00:00:00 2001 From: xhl <2682950883@qq.com> Date: Fri, 6 May 2022 10:53:45 +0800 Subject: [PATCH 2/2] optimize the vector plus --- main.cpp | 26 +++----------------------- 1 file changed, 3 insertions(+), 23 deletions(-) diff --git a/main.cpp b/main.cpp index 478e11e..17cd318 100644 --- a/main.cpp +++ b/main.cpp @@ -15,32 +15,12 @@ std::ostream &operator<<(std::ostream &os, std::vector const &a) { return os; } -template -struct _if; - -template -struct _if -{ - using value = T1; -}; - -template -struct _if -{ - using value = T2; -}; - -template -struct bigger_size -{ - using value = typename _if< bool(sizeof(T1)>sizeof(T2)), T1, T2 >::value; -}; - // 请修复这个函数的定义:10 分 -template ::value> -std::vector operator+(std::vector const &a, std::vector const &b) { +template +auto operator+(std::vector const &a, std::vector const &b) { // 请实现列表的逐元素加法!10 分 // 例如 {1, 2} + {3, 4} = {4, 6} + using T0 = decltype(T1()+T2()); const size_t s = std::min(a.size(), b.size()); std::vector v(s); for(int i=0; i