操作矢量+ =失败
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的内容。
有什么建议吗?
存在着的std :: valarray中用于这一目的。
此输出操作
friend ostream & operator<< (ostream & stream, Vector t)
都不可能导致bad_alloc
因为它复制向量参数。
你可以试试这个,而不是
friend ostream & operator<< (ostream & stream, const Vector& t)
,以避免这种情况。
要避免空载体没有end()-1
的问题,您可能需要将输出置于if (!t.empty())
之内。
最后这个表达式*(t.end()-1)
可以简化为t.back()
。
谢谢博,这消除了'bad_alloc'。 不清楚为什么,但工程。 广东话它为出现,而不是矢量值垃圾一样的道理? – OlegG 2012-07-27 09:10:33
原因了'bad_alloc'将是您在创建额外的副本时耗尽内存。 '+ ='运算符假定这两个向量具有相同的大小。如果'a'的大小与添加的矢量大小不同,则完全不起作用。 – 2012-07-27 09:17:55
为什么你使用't.end() - 1'?如果矢量为空,则该值甚至不存在。 – jogojapan 2012-07-27 08:44:30
您是否尝试过在调试器中运行?您应该能够通过检查回溯来看到导致此问题的线路。 – 2012-07-27 08:44:34
为什么你的运算符 ForEveR 2012-07-27 08:46:00