【问题标题】:Overloading operators for STL VectorSTL 向量的重载运算符
【发布时间】:2013-10-22 08:52:09
【问题描述】:

我知道这通常不是最好的主意,但我决定试一试。我正在尝试重载 + 运算符以对两个向量进行元素明智的添加。由于某种原因,它仅正确返回向量中的第一个值。 我不知道出了什么问题?如果我在计算 sum 数组的元素时使用 push_back 而不是调整大小,它也将不起作用。这是代码:

    #include "stdafx.h"
    #include <iostream>
    #include "conio.h"
    #include <vector>

    using namespace std;

    class dvector{

    public:
        vector<double> q;
        dvector(vector<double>);
        dvector();
    };
    dvector::dvector(vector<double> a) {
        q=a;
    };
    dvector::dvector() {
        vector<double> q;
    };

    dvector operator+(dvector c1, dvector c2)
    {
        int sz=c1.q.size();
        dvector sum;
        sum.q.resize(sz);
        double temp;
        for (int i=0; i<sz; i++){
            sum.q[i]=c1.q[i]+c2.q[i];
            return sum;
        }
    }


    int _tmain(int argc, _TCHAR* argv[])

    {
        vector<double> test1;
        test1.resize(10);
        for (int i=0; i<10;i++){
            test1[i]=i;
        }
        vector<double> test2;
        test2.resize(10);
        for (int i=0; i<10;i++){
            test2[i]=2;
        }
        dvector dtest1(test1); 
        dvector dtest2(test2); 
        dvector sum=dtest1+dtest2;

        for (int i =0;i<10;i++)

            {
                cout<<sum.q[i]<<' ';
            }
        getch();
        return 0;
    }

【问题讨论】:

    标签: c++ stl


    【解决方案1】:

    在第一次迭代之后,您在 for 循环中的 return。您应该将return sum; 移动到operator+ 的最后一行。

    【讨论】:

      【解决方案2】:

      因为你回来得太快了。 return 语句不仅会跳出for loop 还会退出函数。

      dvector operator+(dvector c1, dvector c2)
      {
          int sz=c1.q.size();
          dvector sum;
          sum.q.resize(sz);
          double temp;
          for (int i=0; i<sz; i++){
              sum.q[i]=c1.q[i]+c2.q[i];
              //return sum;  // don't return until you finish calculating
          }
          return sum;    // move to here
      }
      

      【讨论】:

      • 天哪,谢谢。我太担心所有这些关于重载运算符的警告,所以我忘了检查代码。
      • @user1364012 很高兴它有帮助!
      猜你喜欢
      • 2022-01-05
      • 2013-11-10
      • 2013-05-15
      • 1970-01-01
      • 2020-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-08
      相关资源
      最近更新 更多