From 90031fad221097c0410c342a7768dbb00a9bf522 Mon Sep 17 00:00:00 2001 From: kyleskyguo <32405872+kyleskyguo@users.noreply.github.com> Date: Wed, 14 May 2025 15:54:54 +0800 Subject: [PATCH] hw03 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1,补充模板定义 2,使用decltype(aoto)自动推导函数返回值 3,使用using定义相加结果的类型 4,通过std::visit自动匹配lambda中的类型 5,重载+号,利用强制转换匹配d+c 这个练习重温了课堂上模板与几个容器的结合运用。 --- main.cpp | 37 +++++++++++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/main.cpp b/main.cpp index d76cce7..b6f53c9 100644 --- a/main.cpp +++ b/main.cpp @@ -3,9 +3,12 @@ #include // 请修复这个函数的定义:10 分 -std::ostream &operator<<(std::ostream &os, std::vector const &a) { +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,22 +19,44 @@ std::ostream &operator<<(std::ostream &os, std::vector const &a) { // 请修复这个函数的定义:10 分 template -std::vector operator+(std::vector const &a, std::vector const &b) { +decltype(auto) operator+(std::vector const &a, std::vector const &b) +{ // 请实现列表的逐元素加法!10 分 // 例如 {1, 2} + {3, 4} = {4, 6} + using T0 = decltype(a[0] + b[0]); + std::vector result; + for (size_t i = 0; i < std::min(a.size(), b.size()); i++) + { + result.push_back(a[i] + b[i]); + } + return result; } template -std::variant operator+(std::variant const &a, std::variant const &b) { +std::variant operator+(std::variant const &a, std::variant const &b) +{ // 请实现自动匹配容器中具体类型的加法!10 分 + return std::visit([&](auto const &x, auto const &y) -> std::variant + { return x + y; }, a, b); +} + +template +std::variant operator+(std::variant const &a, T3 const &b) +{ + return a + std::variant(b); } 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 &x) + { os << x; }, a); + return os; } -int main() { +int main() +{ std::vector a = {1, 4, 2, 8, 5, 7}; std::cout << a << std::endl; std::vector b = {3.14, 2.718, 0.618};