谁能帮我做我自己的矢量类

Can anybody help me to do my own Vector class?

本文关键字:自己的 我自己      更新时间:2023-10-16

我只对push_back函数有问题,编译器说:

CRT 检测到应用程序在堆缓冲区结束后写入内存

我想做一个push_back function,在向量的末尾添加一个新元素。

#pragma once
#include <cstdio>
#include <cmath>
#include <iostream>
#include <cstdlib>
class tomb {
private:
    double *adat;
    int szam;
public:
    tomb(){
        adat = NULL;
        szam = 0;
    }
    int meret()const {
        return szam;
    }
    ~tomb() {
        delete[] adat;
    }
    double & operator[](int n) {
        return adat[n];
    }
    const double & operator[](int n)const {
        return adat[n];
    }
    void push_back(const double &a) {
        double *tmp;
        int pos = szam + 1;
        tmp = new double[szam+1];
        for (int i = 0; i < szam; i++)
        {
            tmp[i] = adat[i];
        }
        tmp[pos] = a;
        delete[] adat;
        adat = tmp;
        ++szam;
    }
    void Kiir()const {
        for (int i = 0; i < szam; i++)
        {
            std::cout << adat[i] << "n";
        }
    }
};

pos应该是szam而不是szam+1。您愿意在最后一个位置插入,在从 0 开始的索引中,该位置n-1 .

问题出在这一行:

tmp[pos] = a;

由于pos初始化为 szam + 1 ,这相当于:

tmp[szam + 1] = a;

这是超出数组限制的一个。

解决方案是完全摆脱pos,只需执行以下操作:

tmp[szam] = a;

顺便说一句,您的类正在使用默认的复制构造函数和赋值运算符,这些运算符将无法正常工作。你真的应该为此做点什么。