2013-10-22 174 views
1

我知道这通常不是最好的主意,但我决定试一试。我试图超载+运算符来使元素明智地添加两个向量。出于某种原因,它正确地返回矢量中的第一个值。 我不知道什么是错的?它也不会工作,如果我将使用push_back而不是调整sum数组元素时调整大小。下面是代码:超载运营商的STL矢量

#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; 
    } 

回答

4

因为你退回得太快。 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 
} 
+0

OMG谢谢。我太担心所有关于重载操作符的警告,所以我忘了检查代码。 – user1364012

+0

@ user1364012很高兴帮助! – billz

5

return在第一次迭代后,您for -loop权利。您应该将return sum;移动到最后一行operator+