我实现矢量。所以我测试了运营商,但operator +无法正常工作。

Hereis标头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::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.data[i] = data[i] + rhs.data[i];
  }
  return tmp;
};


主要代码是

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();


输出是

v1

0 1 2 3

二手:4,容量:4

v2

0 10 20 30

二手:4,容量:4

(v1 + v2)

-6.27744e + 66 -6.27744e + 66 -6.27744e + 66 -6.27744e + 66

二手:0,容量:4

我认为当执行print_info()函数时,已释放的tmp被释放。

如何正确打印矢量?

最佳答案

您没有设置返回向量的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;
};

关于c++ - 为什么在 vector 运算符+之后使用伪值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46520968/

10-11 22:10