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) 如果该cout << .....操作未成功完成,但会添加一些垃圾this而不是 a 的内容。

有什么建议么?

4

2 回答 2

2

为此目的存在 std::valarray 。

于 2012-07-27T09:03:34.110 回答
1

此输出运算符

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

可能会导致 a bad_alloc,因为它复制了 Vector 参数。

你可以试试这个

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

为了避免这种情况。

为了避免空向量没有的问题,end()-1您可能希望将输出放在if (!t.empty()).

最后这个表达式*(t.end()-1)可以简化为t.back()

于 2012-07-27T09:07:36.073 回答