0
template <class ElementType,int Dimension=1>  
class Vector : public vector<ElementType> {  
    public:

    Vector & operator+= (const Vector & a){  
        cout << " a " << a << endl;  
        transform (this->begin(), this->end(), a.begin(), this->begin(), plus<ElementType>());  
        return *this;  
    };  

  friend ostream & operator<< (ostream & stream, Vector t) {
      stream << "(";
      copy (t.begin(), t.end()-1, ostream_iterator<ElementType>(stream,","));
      return stream << *(t.end()-1) << ")";
  };

};

1) 実行時にエラー メッセージが表示されます。

terminate called after throwing an instance of 'std::bad_alloc'  
what():  std::bad_alloc

このメッセージの原因は次のとおりです。cout << " a " << a << endl;

2)その操作は正常に終了しませんでしたが、aの内容の代わりにcout << .....ゴミが追加されました。this

助言がありますか?

4

2 に答える 2

2

この目的のために std::valarray が存在します。

于 2012-07-27T09:03:34.110 に答える
1

この出力演算子

friend ostream & operator<< (ostream & stream, Vector t)

bad_allocVector パラメータをコピーするため、可能性があります。

代わりにこれを試すことができます

friend ostream & operator<< (ostream & stream, const Vector& t)

それを避けるために。

を持たない空のベクトルの問題を回避するend()-1には、出力を 内に配置することをお勧めしますif (!t.empty())

最後に、この式*(t.end()-1)は に簡略化できますt.back()

于 2012-07-27T09:07:36.073 に答える