【发布时间】:2018-03-13 06:09:05
【问题描述】:
我实现了向量。所以我测试了操作符,但是操作符+不能正常工作。
这里是头文件 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() 函数执行时,reruned tmp 被释放。
如何正确打印矢量?
【问题讨论】:
-
您确定您的复制构造函数正常工作吗?它会进行深复制吗?
-
与您的问题无关,但我也建议您花点时间阅读the canonical implementation of binary arithmetic operators。在您的情况下,建议
operator+函数是非成员函数,使用成员函数operator+=实现。 -
[OT3]:您不希望向量具有相同的 size 而不是 capacity?
-
最后一件事:虽然您的
operator+(以及您的operator+=我假设)在某种程度上可能有意义,但对于 容器 来说却没有意义透视图,其中+运算符通常附加 两个容器。您的课程更像是std::valarray的重新实现而不是std::vector。
标签: c++ vector operator-keyword