C++ 在构造函数(c+;+;)中填写我自己的向量类

C++ 在构造函数(c+;+;)中填写我自己的向量类,c++,C++,我创建了自己的vector类,并且有两个构造函数: 1) 第一个创建一个维度为dim 2) 第二个取输入向量v并填入我自己的向量: //Vector: #include <iostream> #include <vector> #include <string> #include <stdexcept> #include <cmath> using namespace std; class Vector{ private: i

我创建了自己的vector类,并且有两个构造函数:

1) 第一个创建一个维度为
dim

2) 第二个取输入向量v并填入我自己的向量:

//Vector:
#include <iostream>
#include <vector>
#include <string>
#include <stdexcept>
#include <cmath>
using namespace std;

class Vector{
private:
    int dim;
    double *elem;

public:
    Vector(int dim); //n-dimensional zero vector
    Vector(const vector<double>& v); // vector based on the input coordinates
    double& operator[](int i) const {return elem[i];}
    Vector operator+(const Vector& v);
    Vector operator-(const Vector& v);
    Vector operator*(const Vector& v);
    void norm();
    int get_size() const {
        return dim;
    }


};

Vector::Vector(int size){
    elem = new double[size]; //adress of the array
    dim = size;
    for(int i = 0;i<size; ++i){
        elem[i] = 0;
    }
}

Vector::Vector(const vector<double>& v){
    for(unsigned i = 0;i<v.size();++i){
        elem[i] = v[i];
    }
    dim = v.size();
}
//向量:
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
类向量{
私人:
int-dim;
双*元素;
公众:
向量(int dim);//n维零向量
向量(const Vector&v);//基于输入坐标的向量
双重&运算符[](int i)常量{return elem[i];}
向量运算符+(常量向量&v);
向量运算符-(常量向量&v);
向量运算符*(常数向量&v);
无效范数();
int get_size()常量{
返回暗淡;
}
};
向量::向量(整数大小){
elem=new double[size];//数组的地址
dim=尺寸;

对于(inti=0;i,接受
std::vector
的构造函数需要首先调整内部数组的大小

Vector::Vector(const vector<double>& v){
    elem = new double[v.size()];
    for(unsigned i = 0;i<v.size();++i){
        elem[i] = v[i];
    }
    dim = v.size();
}

您的程序显示未定义行为的迹象

未定义的行为源于未正确实现的第二个构造函数

您正在使用:

Vector::Vector(const vector<double>& v){
    for(unsigned i = 0;i<v.size();++i){
        elem[i] = v[i];
    }
    dim = v.size();
}
另外,请仔细阅读并确保正确实现复制构造函数、析构函数和复制赋值运算符

旁白

既然您在接口中使用了
std::vector
,那么有什么理由不能在实现中使用它吗

使用

class Vector{
  private:
    std::vector<double> elem;

  ...
};
类向量{
私人:
std::向量元素;
...
};

将使您的实现更加简单和容易出错。

您没有分配任何内容。我看不出您试图在何处填充向量。您创建了三个向量,其中一个是空的,然后显示空的。您希望发生什么?此外,您的
向量
违反了
运算符*
o运算符+
等。按值返回
Vector
,但是您的
Vector
类完全没有准备好按值返回
Vector
。您需要首先实现复制构造函数、赋值运算符和析构函数。然后测试复制、赋值和销毁。一旦测试了这些函数,然后添加如下内容
operator*
operator-
,等等。赋值运算符和复制构造函数。我不会给出任何修复。这是一个非常糟糕的设计,正确的修复需要付出更多的努力。我甚至认为这个答案是错误的,因为你说“调整内部数组的大小”这不是代码所做的。谢谢你的解释。我以这种方式实现,因为我想练习使用指针。但实际上我不太清楚,什么时候应该使用指针,什么时候应该避免使用指针them@vitsuk,你正走在正确的学习轨道上。不管是好是坏,我们从迷雾中学习得最好阿克斯。
Vector::Vector(const vector<double>& v){
    for(unsigned i = 0;i<v.size();++i){
        elem[i] = v[i];
    }
    dim = v.size();
}
Vector::Vector(const vector<double>& v){
    elem = new double[v.size()]; // Need this.
    for(unsigned i = 0;i<v.size();++i){
        elem[i] = v[i];
    }
    dim = v.size();
}
class Vector{
  private:
    std::vector<double> elem;

  ...
};