@olkhovich

Как удалить элементы вектора без сдвига?

Допустим у меня есть каталог продуктов и я хочу удалить какой-то элемент по ID (введенному с клавиатуры), который равен индексу этого элемента. При первом удаление все в порядке, но при вторичном – вектор сдвигается и удаляется не тот элемент. Элементами вектора являются экземпляры класса.

Я написал:
void Car::buyCar(int buyId) {
    catalog.reserve(10);
    catalog.erase(catalog.begin() + buyId);
}


И:
system("cls");
        std::cout << "Введите свое имя: ";
        std::cin >> client.name; 
        clientBase.push_back(client);
        std::cout << std::endl;
        cars.printCatalog();
        std::cout << "\nВведите ID автомобиля, который хотите приобрести: ";
        std::cin >> cars.id;
        system("cls");
        std::cout << "Поздравляем, " << client.name << "! Вы приобрели автомобиль под номером " << cars.id << ".";
        cars.buyCar(cars.id);
  • Вопрос задан
  • 403 просмотра
Решения вопроса 1
@galaxy
Вариант 1: не удаляйте элемент, помечайте проданным (или введите соглашение, что допустим, машины с id = -1 - проданы)

Вариант 2: используйте std::map
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы