У меня есть простая программа C ++, которая действует как список TODO, она содержит вектор, который содержит тип класса Item для отслеживания каждого TODO и их идентификатора. объективно более эффективно, при этом следуя этим ограничениям, основанным на векторе , используя элемент класса и отслеживая идентификаторы. Обратите внимание, что это не вопрос о том, почему вы устанавливаете идентификаторы в первую очередь , я хочу знать, что будет лучшим методом, следуя ограничениям.
Пример:
Представьте PrettyPrint-Override ">Todo todos = Todo();
todos.add("Take out the trash.");
todos.add("Do the laundry.");
todos.add("Read a book.");
todos.add("Make dinner.");
Наш список выглядит так, когда мы вызовут list () :
{Todo[{Item(id=0, desc="Take out the trash.")}, {Item(id=1, desc="Do the laundry.")}, {Item(id=2, desc="Read a book.")}, {Item(id=3, desc="Make dinner.")}]}
ids: 0, 1, 2, 3
Если я затем удалю элемент в ID 2 :
:
todos.remove(2);
< /code>
Результат будет: < /p>
{Todo[{Item(id=0, desc="Take out the trash.")}, {Item(id=1, desc="Do the laundry.")}, {Item(id=3, desc="Make dinner.")}]}
ids: 0, 1, 3
Теперь мы удалили элемент в id 2 , но я хочу сохранить идентификаторы . fix () функция, она будет выполнять каждый индекс нашего Todos , проверьте, соответствует ли идентификатор элементов ожидаемому следующему идентификатору, если он не установите идентификатор элементов в текущий индекс итерации (i)
void Todo::fix() {
for (int i = 0; i < static_cast(todos.size()); i++) {
if (todos.getId() != i) {
todos.setId(i);
}
}
}
< /code>
Вот мой код: < /p>
todos.add("Take out the trash.");
todos.add("Do the laundry.");
todos.add("Read a book.");
todos.add("Make dinner.");
todos.remove(2);
todos.fix();
Если мы запустим это, наш Todos теперь будет:
{Todo[{Item(id=0, desc="Take out the trash.")}, {Item(id=1, desc="Do the laundry.")}, {Item(id=2, desc="Make dinner.")}]}
ids : 0, 1, 2
Отлично! Я получил результат, который хотел, но вот вопрос: < /p>
Это самый эффективный способ выполнить эту задачу в C ++? Кажется, что если бы это был больший список, он мог бы стать ресурсным и медленным. Есть ли какой-нибудь более быстрый/более эффективный способ сделать это?#include
#include
У меня есть простая программа C ++, которая действует как список TODO, она содержит вектор, который содержит тип класса Item для отслеживания каждого TODO и их идентификатора. объективно более эффективно, при этом следуя этим ограничениям, основанным на векторе , используя элемент класса и отслеживая идентификаторы. Обратите внимание, что это не вопрос о том, почему вы устанавливаете идентификаторы в первую очередь , я хочу знать, что будет лучшим методом, следуя ограничениям. Пример: Представьте PrettyPrint-Override ">Todo todos = Todo();
todos.add("Take out the trash."); todos.add("Do the laundry."); todos.add("Read a book."); todos.add("Make dinner.");
Наш список выглядит так, когда мы вызовут list () : {Todo[{Item(id=0, desc="Take out the trash.")}, {Item(id=1, desc="Do the laundry.")}, {Item(id=2, desc="Read a book.")}, {Item(id=3, desc="Make dinner.")}]}
[list] [*] ids: 0, 1, 2, 3 [/list] Если я затем удалю элемент в ID 2 : : todos.remove(2); < /code> Результат будет: < /p> {Todo[{Item(id=0, desc="Take out the trash.")}, {Item(id=1, desc="Do the laundry.")}, {Item(id=3, desc="Make dinner.")}]}
[list] [*] ids: 0, 1, 3 [/list] Теперь мы удалили элемент в id 2 , но я хочу сохранить идентификаторы [b] . fix () функция, она будет выполнять каждый индекс нашего Todos , проверьте, соответствует ли идентификатор элементов ожидаемому следующему идентификатору, если он не установите идентификатор элементов в текущий индекс итерации (i) void Todo::fix() { for (int i = 0; i < static_cast(todos.size()); i++) { if (todos[i].getId() != i) { todos[i].setId(i); } } } < /code> Вот мой код: < /p> todos.add("Take out the trash."); todos.add("Do the laundry."); todos.add("Read a book."); todos.add("Make dinner."); todos.remove(2); todos.fix();
Если мы запустим это, наш Todos теперь будет: {Todo[{Item(id=0, desc="Take out the trash.")}, {Item(id=1, desc="Do the laundry.")}, {Item(id=2, desc="Make dinner.")}]}
[list] [*] ids [/b]: 0, 1, 2 [/list] Отлично! Я получил результат, который хотел, но вот вопрос: < /p> Это самый эффективный способ выполнить эту задачу в C ++? Кажется, что если бы это был больший список, он мог бы стать ресурсным и медленным. Есть ли какой-нибудь более быстрый/более эффективный способ сделать это?#include #include