From 99447da9161ffb280eaef1279528a1c293a37ced Mon Sep 17 00:00:00 2001 From: WangYuHang-cmd <377374481@qq.com> Date: Sun, 12 Mar 2023 18:52:40 +0800 Subject: [PATCH] Finished basic demand --- README.md | 1 + main.cpp | 44 +++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 8e8b097..c8b4ccc 100644 --- a/README.md +++ b/README.md @@ -27,3 +27,4 @@ 如果你把 variant 的 operator<< 改成了基于变长模板参数的,或是实现了其他运算符: 只要是在 **满足作业要求的基础** 上,这是件好事! 老师会酌情加分,视为“独特的创新点”,但最多不超过 20 分。 + diff --git a/main.cpp b/main.cpp index d76cce7..21ed9b6 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,26 +17,63 @@ 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) { + using T0=decltype(T1{}+T2{}); // 请实现列表的逐元素加法!10 分 + int _=std::min(a.size(), b.size()); + std::vector vec(_); + for(int i=0;i<_;++i){ + vec[i]=(a[i]+b[i]); + } + // for(auto u:vec) std::cout << u << " " ;std::cout<<"\n"; + return vec; // 例如 {1, 2} + {3, 4} = {4, 6} } template std::variant operator+(std::variant const &a, std::variant const &b) { // 请实现自动匹配容器中具体类型的加法!10 分 + std::variant res; + std::visit([&](auto const& A, auto const& B){ + res=A+B; + }, a, b); + return res; +} + +template +std::variant operator+(std::variant const &a, T1 const &b) { + // 请实现自动匹配容器中具体类型的加法!10 分 + std::variant res; + if(std::holds_alternative(a)){ + res=std::get<0>(a)+b; + } + return res; +} + +template +std::variant operator+(std::variant const &a, T2 const &b) { + // 请实现自动匹配容器中具体类型的加法!10 分 + std::variant res; + if(std::holds_alternative(a)){ + res=std::get<1>(a)+b; + } + return res; } template std::ostream &operator<<(std::ostream &os, std::variant const &a) { // 请实现自动匹配容器中具体类型的打印!10 分 + std::visit([&](auto const &t){ + os << t; + }, a); + return os; } int main() { std::vector a = {1, 4, 2, 8, 5, 7}; - std::cout << a << std::endl; + std::cout << a << std::endl; std::vector b = {3.14, 2.718, 0.618}; - std::cout << b << std::endl; + std::cout << b << std::endl; auto c = a + b; // 应该输出 1