我无法制作自己的动态矢量类...... 最终目标是模拟堆栈和队列,在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);
}
}
答案 0 :(得分:4)
这不起作用:
int vec[x];
arr=vec;
您正在为成员变量分配一个自动局部变量的地址,该变量将使作用域退出。从那时起访问它是未定义的行为。更糟糕的是,这甚至不是可移植的,因为它依赖于可变长度数组的编译器扩展,这是C ++标准所不支持的。
您需要使用operator new []
动态分配基础向量。您还需要正确实现析构函数,赋值运算符和复制构造函数(如果需要完整的开局,移动分配和移动 - 构造)以正确遵守Rule of Three/Five语义。