@ber_enot
Веб-разработчик, Vue.js / Node.js

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

Имеется такой код:

vector<Query> queries;
...
channels.push_back(Query(i));
...
queries.erase(remove_if(queries.begin(), queries.end(), IsEnded), queries.end());


IsEnded:
bool IsEnded(const Query &aVar)
{
    bool ok = false;
    if (aVar.id==-1)
    ok = true;
    return ok;
}


Проблема в том, что после удаления происходит что-то непонятное. При добавлении нового элемента никаких ошибок не выдается, но при передаче этого элемента по ссылке все поля объекта теряются:
void servBegin(Query &que) {           
            cout << "    #" << que.id << endl;
        }

Выводит #0.
Передача осуществляется в цикле так:
for(i=0;i<n;i++) {
                if(channels[i].isFree() && queries[k-1].chn_num < L) {
                    channels[i].servBegin(queries[k-1]);
                }
            }

Возможно, косяк именно из-за цикла?
До удаления все работает прекрасно. Как исправить?
Буду очень благодарен за простенький пример с удалением и последующим добавлением элемента в вектор.
  • Вопрос задан
  • 339 просмотров
Решения вопроса 1
@Mercury13
Программист на «си с крестами» и не только
У вас могут быть две проблемы.
1. Неверно написана операция «присвоить» или «переместить».
2. Забыл, что в std::vector при операции «добавить» или «удалить» возможно физическое перемещение объекта и ссылки на него больше недействительны.

Ну и IsEnded лучше писать вот так.
bool IsEnded(const Query &aVar) { return (aVar.id == NO_ID); }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы