gpt4 book ai didi

c++ - 为什么 vector 运算符+之后的虚拟值?

转载 作者:行者123 更新时间:2023-11-28 01:42:42 26 4
gpt4 key购买 nike

我实现 vector 。所以我测试了运算符,但 operator+ 无法正常工作。

这里是头文件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();

输出是

第一版

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() 函数执行时,retruned tmp 被释放。

如何正确打印 vector 图?

最佳答案

您没有设置返回 vector 的 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com