【问题标题】:My own vector class我自己的矢量类
【发布时间】:2015-05-26 20:14:50
【问题描述】:

我正在尝试创建自己的矢量类。我想重载 STL 向量的基本特性。我的代码在测试后正在编译,显示一条消息“分段错误(核心转储是)”。你能告诉我哪里可以改进我的代码吗?提前谢谢!

#include<iostream>
#include<fstream>
using namespace std;

class Vector
{
 public:
    Vector();
    Vector(const Vector& vect);
    ~Vector();
    Vector& operator =(const Vector& vect);
    void insert(double element);
    bool operator ==(const Vector& vect);
    Vector& operator +(const Vector& vect);
    Vector& operator -(const Vector& vect);
    Vector& operator *(const Vector& vect);
    int size();
    double operator[](int num);
    friend istream& operator >>(istream& input,  Vector& vect);
    friend ostream& operator <<(ostream& output,  Vector& vect);
 private:
    double* data;
    int num;
    int max;
};

Vector:: Vector()
{
    double* data = NULL;
    int num = 0;
    int max = 0;
}

Vector::Vector(const Vector& vect)// not sure if its correct
{

    data = new double[vect.max];
    memcpy(data, vect.data, sizeof(double) * vect.num);
    num = vect.num;
    max = vect.max;

}

Vector::~Vector()
{
    if(data)
    {
        delete[] data;
        data = 0;
    }
}

void Vector:: insert(double element)
{
    if(num < max)
    {
        *(data + num) = element;
    }
    else
    {
        double *tmp = new double[num * 2];
        delete[] data;
        *(data + num) = element;
        max *= 2;
    }
    num++;
}

Vector& Vector:: operator = (const Vector& vect)// highly unlikely to be correct
{
    if(this != &vect)
    {
            if(data)
            {
                delete[] data;
                data = 0;
            }
            max = vect.max;
            data = new double[max];
            for(int i = 0; i < num; i++)
            {
                this->data[i] = vect.data[i];
            }

    }
    return *this;
}

bool Vector:: operator ==(const Vector& vect)
{
    bool isEqual = true;
    if(this->num != vect.num)
    {
        isEqual = false;
    }
    for(int i = 0; i < num; i++)
    {
        if(this->data[i] != vect.data[i] )
        {
            isEqual = false;
        }
    }
    return isEqual;
}

Vector& Vector:: operator +(const Vector& vect)
{
    Vector result;

    for (int i = 0; i < num; ++i)
    {
        result.insert(*(data + i) + *(vect.data + i));
    }

    return result;

}

Vector& Vector:: operator -(const Vector& vect)
{
    Vector result;

    for (int i = 0; i < num; ++i)
    {
        result.insert(*(data + i) - *(vect.data + i));
    }

    return result;

}

Vector& Vector::operator*(const Vector &vect)
{
    Vector result;

    for (int i = 0; i < num; ++i)
    {
        result.insert(*(data + i) * *(vect.data + i));
    }

    return result;
}

int Vector:: size()
{
    return num;
}

double Vector::operator[](int num)
{
    return *(data + num);
}

ostream &operator <<(ostream &output,  Vector &vect)
{
    output << "[";
    for (int i = 0; i < vect.size(); ++i)
    {
        output << vect[i];
        if (i < vect.size() - 1)
            output << ",";
    }
    output << "]\n";

    return output;
}

istream &operator >>(istream &input,  Vector &vect)
{
    double element;
    input >> element;
    vect.insert(element);

    return input;
}

int main()
{
    Vector vec;
    for (int i = 0; i < 10; ++i)
    {
        vec.insert(i);
    }


    return 0;
}

【问题讨论】:

  • 否;您必须自己调试它(或与朋友/导师/导师)。这不是一个为您调试代码的网站。
  • 使用调试器。它的存在是为了为您服务。
  • 为什么要“重载STL向量的基本特征”??你想做什么你不能用 std::vector 做什么? (顺便说一句,据我所见,除了&lt;&lt;&gt;&gt; 之外,您在这里没有超载任何东西)
  • 我想练习一下,很抱歉以这种方式发布主题,但我真的努力了好几个小时。
  • 想想你在构造函数中初始化了哪些变量。

标签: c++ oop vector


【解决方案1】:

仔细查看您的insert 函数。特别是您如何调整数组的大小。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多