From 02c7e3e25f6a07ed1fafbf7a90229341617dd8cf Mon Sep 17 00:00:00 2001 From: frsama <108132842+frsama@users.noreply.github.com> Date: Sun, 24 Jul 2022 16:05:23 +0800 Subject: [PATCH] Update main.cpp MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 实现了vector和variant,vector>相加的函数,包括两个加法结合方向。 --- main.cpp | 40 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/main.cpp b/main.cpp index d76cce7..e7c2f10 100644 --- a/main.cpp +++ b/main.cpp @@ -3,9 +3,10 @@ #include // 请修复这个函数的定义:10 分 +template std::ostream &operator<<(std::ostream &os, std::vector const &a) { os << "{"; - for (size_t i = 0; i < a.size(); i++) { + for (size_t i = 0; i < a.size(); ++i) { os << a[i]; if (i != a.size() - 1) os << ", "; @@ -16,19 +17,52 @@ 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{}); + int n = (a.size() < b.size() ? a.size() : b.size()); + std::vector res; + for(int i = 0; i < n; ++i){ + res.push_back(a[i] + b[i]); + } + return res; +} + +//缺少vector与variant, vector>相加的重载,故增加 +template +auto operator+(std::variant const &a, std::vector const &b) { + return std::visit( + [&](auto const &a) -> std::variant { + return a + b; + }, a); +} + +template +auto operator+(std::vector const &a, std::variant const &b) { + return std::visit( + [&](auto const &b) -> std::variant { + return a + b; + }, b); } 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 &a, auto const &b) -> std::variant { + return a + b; + }, a, b); } template std::ostream &operator<<(std::ostream &os, std::variant const &a) { // 请实现自动匹配容器中具体类型的打印!10 分 + std::visit( + [&](auto const &a){ + os << a;//获取到特定type后直接调用vector的输出方式 + }, a); + return os; } int main() {