C++ 为什么在向量运算符+;之后使用伪值;?

C++ 为什么在向量运算符+;之后使用伪值;?,c++,vector,operator-keyword,C++,Vector,Operator Keyword,我喜欢实现向量。所以我测试了操作符,但是操作符+不能正常工作 这是标题MyDoubleVector.h class MyDoubleVector { public: MyDoubleVector(); MyDoubleVector(size_t init_capacity); MyDoubleVector(const MyDoubleVector& v); ~MyDoubleVector(); MyDoubleVector& ope

我喜欢实现向量。所以我测试了操作符,但是操作符+不能正常工作

这是标题MyDoubleVector.h

class MyDoubleVector {
public:
    MyDoubleVector();

    MyDoubleVector(size_t init_capacity);

    MyDoubleVector(const MyDoubleVector& v);

    ~MyDoubleVector();

    MyDoubleVector& operator=(const MyDoubleVector& v); //for deep copy

    bool operator==(const MyDoubleVector& v); //binary

    MyDoubleVector& operator+=(const MyDoubleVector& add);

    MyDoubleVector operator[](int index); //return reference to data that requested index

    MyDoubleVector operator+(const MyDoubleVector& rhs); //binary

    MyDoubleVector operator-(const MyDoubleVector& rhs); //binary

    MyDoubleVector operator*(const MyDoubleVector& rhs); //binary

    MyDoubleVector operator-(); //unary

    MyDoubleVector operator()(); //unary

    void pop_back();

    void push_back(double x);

    size_t capacity() const; 

    size_t size() const; 

    void reserve(size_t n); 

    bool empty() const; 

    void clear(); 

    void print_info();

private:
    double *data;
    size_t capa;
    size_t used;

};
下面是实现代码“MyDoubleVector.cpp”

MyDoubleVector MyDoubleVector::运算符+(常量MyDoubleVector&rhs){//binary
//pre:同样大小,
//偏序集:返回和,
如果(capa!=右侧capa){
出口(1);
}
mydoublevectormmp(capa);
对于(大小i=0;i
主代码是

int i = 0;

MyDoubleVector v1(3);
for (i = 0; i < 4; i++) {
    v1.push_back(i);
}
cout << "v1" << endl;
v1.print_info();

MyDoubleVector v2(3);
for (i = 0; i < 4; i++) {
    v2.push_back(i * 10);
}
cout << "v2" << endl;
v2.print_info();

cout << "(v1+v2)" << endl;
(v1+v2).print_info();
inti=0;
mydoublevectorv1(3);
对于(i=0;i<4;i++){
v1.推回(i);
}

cout您没有设置返回向量的
used
。在没有看到类的其余实现的情况下,我想您可以更改为:

MyDoubleVector MyDoubleVector::operator+(const MyDoubleVector &rhs) { //binary
//pre : same size, 
//poset : return sum,
  if (capa != rhs.capa) {
      exit(1);
  }
  MyDoubleVector tmp(capa);
  for (size_t i = 0; i < capa; i++) {
      tmp.push_back(data[i] + rhs.data[i]);
  }
  return tmp;
};
MyDoubleVector MyDoubleVector::运算符+(常量MyDoubleVector&rhs){//binary
//pre:同样大小,
//偏序集:返回和,
如果(capa!=右侧capa){
出口(1);
}
mydoublevectormmp(capa);
对于(大小i=0;i
您没有设置返回向量的
已用
。在没有看到类的其余实现的情况下,我想您可以更改为:

MyDoubleVector MyDoubleVector::operator+(const MyDoubleVector &rhs) { //binary
//pre : same size, 
//poset : return sum,
  if (capa != rhs.capa) {
      exit(1);
  }
  MyDoubleVector tmp(capa);
  for (size_t i = 0; i < capa; i++) {
      tmp.push_back(data[i] + rhs.data[i]);
  }
  return tmp;
};
MyDoubleVector MyDoubleVector::运算符+(常量MyDoubleVector&rhs){//binary
//pre:同样大小,
//偏序集:返回和,
如果(capa!=右侧capa){
出口(1);
}
mydoublevectormmp(capa);
对于(大小i=0;i
您确定您的复制构造函数按预期工作吗?它能做深度复制吗?你需要学习。与你的问题无关,但我也建议你花些时间阅读。在你的例子中,建议
操作符+
函数是一个非成员函数,使用成员函数
操作符+=
[OT3]实现:你不希望向量具有相同的大小而不是容量吗?最后一件事:当你的
操作符+
时(我假设你的
操作符+=
)从某种意义上讲可能有点道理,但从容器的角度来看,它没有意义,
+
操作符通常会附加两个容器。您的类更像是的重新实现,而不是。您确定您的复制构造函数按预期工作吗?它能做深度复制吗?你需要学习。与你的问题无关,但我也建议你花些时间阅读。在你的例子中,建议
操作符+
函数是一个非成员函数,使用成员函数
操作符+=
[OT3]实现:你不希望向量具有相同的大小而不是容量吗?最后一件事:当你的
操作符+
时(我假设你的
操作符+=
)从某种意义上讲可能有点道理,但从容器的角度来看,它没有意义,
+
操作符通常会附加两个容器。您的类更多地是.thansk的重新实现,请发表评论!我注意到“它能做深度复制吗?”。我修好了程序错误……我修复了这个bug,谢谢!欢迎评论!我注意到“它能做深度复制吗?”。我修好了程序错误……我修复了这个bug,谢谢!