gpt4 book ai didi

c - 在 C 中撤消,复制结构

转载 作者:太空宇宙 更新时间:2023-11-04 04:37:51 25 4
gpt4 key购买 nike

我是 C 的新手,我正在尝试模拟一个问题的撤消功能。我正在使用这样定义的通用 vector :

 typedef void* Element;

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

为此,我创建了一个名为“Copy”的函数,它应该返回我传递的 vector 的副本:

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;
}

当我每次调用它来保存“之前” vector 时,它就起作用了……就像当我尝试在我当前的 vector 上应用添加或删除时,我首先在另一个名为 undoVec 的 vector 上调用这个复制函数,如下所示:

undoVec = copyVector(v);

我检查过它可以工作,但是当我调用我的撤消函数时...它应该执行与之前代码相反的操作:

v = copyVector(undoVec);

它不再工作了。什么都不做。它不会修改我的 vector 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 中撤消,复制结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29290322/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com