diff --git a/main.cpp b/main.cpp index d76cce7..245bdfc 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,25 +17,41 @@ 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{}); + std::vector ret; + for (size_t i = 0; i < std::min(a.size(), b.size()); i++) { + ret.push_back(a[i] + b[i]); + } + return ret; } template -std::variant operator+(std::variant const &a, std::variant const &b) { +std::variant operator+(std::variant const& a, std::variant const& b) { // 请实现自动匹配容器中具体类型的加法!10 分 + std::variant ret; + std::visit([&](auto const& t1, auto const& t2) { + + ret = (t1 + t2); + }, a, b); + return ret; } 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& t) { + std::cout << t << std::endl; + }, a); + return os; } int main() { - std::vector a = {1, 4, 2, 8, 5, 7}; + std::vector a = { 1, 4, 2, 8, 5, 7 }; std::cout << a << std::endl; - std::vector b = {3.14, 2.718, 0.618}; + std::vector b = { 3.14, 2.718, 0.618 }; std::cout << b << std::endl; auto c = a + b; @@ -46,10 +63,13 @@ int main() { std::variant, std::vector> d = c; std::variant, std::vector> e = a; - d = d + c + e; + //std::variant, std::vector> f; + + d = d + std::variant, std::vector>(c) + e; // 应该输出 {9.28, 17.436, 7.236} std::cout << d << std::endl; return 0; } +