diff --git a/main.cpp b/main.cpp
index d76cce7..2cb58ff 100644
--- a/main.cpp
+++ b/main.cpp
@@ -3,6 +3,7 @@
 #include <variant>
 
 // 请修复这个函数的定义:10 分
+template <class T>
 std::ostream &operator<<(std::ostream &os, std::vector<T> const &a) {
     os << "{";
     for (size_t i = 0; i < a.size(); i++) {
@@ -16,19 +17,55 @@ std::ostream &operator<<(std::ostream &os, std::vector<T> const &a) {
 
 // 请修复这个函数的定义:10 分
 template <class T1, class T2>
-std::vector<T0> operator+(std::vector<T1> const &a, std::vector<T2> const &b) {
+auto operator+(std::vector<T1> const &a, std::vector<T2> const &b) {
     // 请实现列表的逐元素加法!10 分
     // 例如 {1, 2} + {3, 4} = {4, 6}
+    using T0 =  decltype(T1{}+T2{});
+    size_t N  = std::min(a.size(), b.size());
+    std::vector<T0> res;
+    for(size_t i = 0; i < N; i++){
+        res.push_back(a[i] + b[i]);
+    }
+    return res;
 }
 
 template <class T1, class T2>
 std::variant<T1, T2> operator+(std::variant<T1, T2> const &a, std::variant<T1, T2> const &b) {
     // 请实现自动匹配容器中具体类型的加法!10 分
+    return std::visit([&] (auto const &t1, auto const &t2) 
+                -> std::variant<T1,T2> {
+        return t1 + t2; 
+    }, a, b);
+}
+
+template <class T1, class T2>
+std::variant<T1, T2> operator+(std::variant<T1, T2> const &a, T1 const &b) {
+    return a + std::variant<T1, T2>(b);
+}
+
+template <class T1, class T2>
+std::variant<T1, T2> operator+(std::variant<T1, T2> const &a, T2 const &b) {
+    return a + std::variant<T1, T2>(b);
+}
+
+template <class T1, class T2>
+std::variant<T1, T2> operator+(T1 const &a, std::variant<T1, T2> const &b) {
+    return b + a;
+}
+
+template <class T1, class T2>
+std::variant<T1, T2> operator+(T2 const &a, std::variant<T1, T2> const &b) {
+    return b + a;
 }
 
 template <class T1, class T2>
 std::ostream &operator<<(std::ostream &os, std::variant<T1, T2> const &a) {
     // 请实现自动匹配容器中具体类型的打印!10 分
+    return std::visit([&] (auto const &t)
+            ->std::ostream &{
+        os<<t;
+        return os;  
+    }, a);
 }
 
 int main() {