我是C新手,我正试图模拟一个问题的撤销功能。我使用的是这样定义的通用向量:

 typedef void* Element;

    typedef struct {
        Element* elems;
        int size;
        int capacity;
    } Vector;

为此,我创建了一个名为“Copy”的函数,该函数将返回我传递的向量的副本:
Vector* copyVector(Vector *v) {
    Vector* rez;
    rez = createVector();
    int i;
    for (i = 0; i < getSize(v); i++) {
        Element el = getElem(v, i);
        add(rez, el);
    }
    return rez;
}

每当我调用它来保存“before”向量时,它就工作了。。。例如,当我尝试对当前向量应用添加或移除时,我首先对另一个名为undoVec的向量调用此copy函数,如下所示:
undoVec = copyVector(v);

我检查过了,但当我调用undo函数时。。。在以下情况下,应该执行与代码相反的操作:
v = copyVector(undoVec);

它不再工作了。什么都不做。它不会改变我的向量v。。。我觉得这只是一个指针
void undoVector(Vector *v, Vector *undoVec)

我做错什么了?为什么这个功能不能工作?我可以粘贴更多的代码或提供更多的信息,如果需要的话,谢谢。
void add(Vector *v, Element elem) {
    if (v->size == v->capacity) {
        isFull(v);
    }
    v->elems[v->size] = elem;
    v->size++;
}

Element getElem(Vector *v, int pos) {
    return v->elems[pos];
}

最佳答案

使用堆栈来实现,因为堆栈有一个顶部。

关于c - 在C中撤消,复制struct,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29290322/

10-11 18:10