Я новичок в C, и я пытаюсь имитировать функциональность Undo для проблемы. Я использую общие векторы, определенные следующим образом:Отменить в 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;
}
It работает, когда я вызываю его каждый раз, чтобы сохранить вектор «before» ... например, когда я пытаюсь применить добавление или удаление моего текущего вектора, я вызываю эту функцию копирования сначала на другой вектор, называемый undoVec, например:
undoVec = copyVector(v);
Я проверил и он работает, но когда я называю отменить функцию ... которая должна сделать обратный код перед тем:
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];
}
Стек больше подходящий для отмены функции. –
Мне нужно только один раз применить отмену, и это было так, как нам было рекомендовано. Любая идея, почему это не работает? – Katie44
Не могли бы вы показать нам функции 'getElement' и' add', тоже? Вы проверили, изменилось ли значение 'v'? – bbastu