首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在向量opertor+之后虚拟值?

为什么在向量opertor+之后虚拟值?
EN

Stack Overflow用户
提问于 2017-10-02 07:15:51
回答 1查看 183关注 0票数 0

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

这里是标题MyDoubleVector.h

代码语言:javascript
复制
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“

代码语言:javascript
复制
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;
};

主要代码是

代码语言:javascript
复制
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,capa :4

v2

0 10 20 30

使用: 4,capa :4

(v1+v2)

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

使用: 0,capa :4

我认为,在执行print_info()函数时,retruned是释放的。

如何正确打印矢量?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-02 08:31:58

您没有设置返回向量的used。如果没有看到类的其余实现,我猜您可以更改为:

代码语言:javascript
复制
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;
};
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46520968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档