diff --git a/main.cpp b/main.cpp index d76cce7..c6e9b4d 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++) { @@ -15,20 +16,42 @@ std::ostream &operator<<(std::ostream &os, std::vector const &a) { } // 请修复这个函数的定义:10 分 -template -std::vector operator+(std::vector const &a, std::vector const &b) { +template // 第一个加法, vector相加 +std::vector> operator+(std::vector const &a, std::vector const &b) { // 请实现列表的逐元素加法!10 分 // 例如 {1, 2} + {3, 4} = {4, 6} + std::vector> sum; + size_t N = std::min(a.size(), b.size()); + for (size_t i=0;i +template // 第二个加法, variant+variant std::variant operator+(std::variant const &a, std::variant const &b) { // 请实现自动匹配容器中具体类型的加法!10 分 + + return std::visit([&](const auto& i, const auto& j)->std::variant {return i + j;}, a, b); } -template -std::ostream &operator<<(std::ostream &os, std::variant const &a) { - // 请实现自动匹配容器中具体类型的打印!10 分 +template // 第二个加法, variant+vector +std::variant operator+(std::variant const &a, T2 const &b) { + // 请实现自动匹配容器中具体类型的加法!10 分 + + return a + std::variant{b}; +} + +template // 第二个加法, vector+variant +std::variant operator+(T1 const &a, std::variant const &b) { + // 请实现自动匹配容器中具体类型的加法!10 分 + return b + std::variant{a}; +} + +template +std::ostream &operator<<(std::ostream &os, std::variant const &args){ + std::visit([&](const auto& i){std::cout << i << std::endl;}, args); + return os; } int main() { @@ -51,5 +74,8 @@ int main() { // 应该输出 {9.28, 17.436, 7.236} std::cout << d << std::endl; + std::variant temp{666}; + std::cout << temp << std::endl; + return 0; }