diff --git a/main.cpp b/main.cpp index d76cce7..82a85a5 100644 --- a/main.cpp +++ b/main.cpp @@ -1,9 +1,10 @@ #include -#include #include +#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++) { os << a[i]; @@ -16,19 +17,48 @@ 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 = std::min(a.size(), b.size()); + std::vector res(n); + for (int i = 0; i < n; ++i) { + res[i] = a[i] + b[i]; + } + return res; } 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([&](const auto& aa, const auto& bb) + -> std::variant { + return aa + bb; + }, + a, b); +} + +template +std::variant operator+(const std::variant& a, const T2& b) { + std::variant bb = b; + return a + bb; +} + +template +std::variant operator+(const T1& a, const std::variant& b) { + std::variant aa = a; + return aa + b; } template -std::ostream &operator<<(std::ostream &os, std::variant const &a) { +std::ostream& operator<<(std::ostream& os, std::variant const& a) { // 请实现自动匹配容器中具体类型的打印!10 分 + return std::visit([&](const auto& t) + -> std::ostream& { + return os << t; + }, + a); } int main() {