拥有“动态”矢量类

时间:2014-03-09 08:03:16

标签: c++ class dynamic vector

我无法制作自己的动态矢量类...... 最终目标是模拟堆栈和队列,在vector类上使用类,然后在c ++上迁移以在链表上建立堆栈和队列, 但我无法制作矢量类...

因为我无法使用默认值创建变量,我在构造函数上分配它们,但是,它接缝它不起作用,这样......我真的不想使用标准库 有任何想法吗?

我的想法是在构造函数中声明数组,然后将其复制到类上的指针声明,但它确实是int工作...我只能得到第一个元素的值,但不能得到其余的...

    class Vector{
    private:
        int *arr;
        int size;
        int inside;
    public:
        Vector(int);
        int length();       // Largo del Arreglo
        int count();        // Numero de elementros adentro
        bool empty();       // Vacio
        bool full();        // Lleno
        int at(int);        // Revisa el N elemento
        int get(int);       // Regresa el n elemento
        bool put(int, int); // Inserta elemento X en n posicicion
        void clean();

};
/// Clase Vector
Vector::Vector(int x){ // Constructor
    int vec[x];
    arr=vec;
    size=x;
    inside=0;
}
// Estado del Vector
bool Vector::empty(){
    if(inside==0){
        return true;
    }
    return false;
}
bool Vector::full(){
    if(inside==size){
        return true;
    }
    return false;
}
int Vector::length(){
    return size;
}
int Vector::count(){
    return inside;
}
// Manipulacion de Datos
int Vector::get(int x){
    int y=at(x);
    put(0,x);
    inside = inside-2;
    return y;

}
int Vector::at(int n){
    int i=arr[n];
    return i;
}
bool Vector::put(int x, int p){
        arr[p]=x;
        inside++;
        return true;
}
void Vector::clean(){
    for(int i=0;i<length();i++){
        put(0,i);
    }
}

1 个答案:

答案 0 :(得分:4)

这不起作用:

int vec[x];
arr=vec;

您正在为成员变量分配一个自动局部变量的地址,该变量将使作用域退出。从那时起访问它是未定义的行为。更糟糕的是,这甚至不是可移植的,因为它依赖于可变长度数组的编译器扩展,这是C ++标准所不支持的。

您需要使用operator new []动态分配基础向量。您还需要正确实现析构函数,赋值运算符和复制构造函数(如果需要完整的开局,移动分配和移动 - 构造)以正确遵守Rule of Three/Five语义。