Так что я хочу выполнить некоторую проверку ошибок на векторе, который у меня есть в классе, чтобы увидеть, существует ли элемент, прежде чем добавлять новый элемент в вектор.Проверка того, что элемент уже находится в векторе
ClassA каст
void ClassA::func(std::shared_ptr<ClassB> new_item)
{
for(auto items : vector_)
{
if(items = new_item)
{
return;
}
vector_.push_back(new_item);
}
}
vector_ является членом класса члена станд :: вектор. В этой текущей реализации все new_item игнорируются, даже если это не дубликат. Я знаю, что «if (items = new_item)» является проблематичной линией, но я не знаю почему.
Сначала попробуйте '==' вместо '='. Затем взгляните на 'std :: find'. – juanchopanza
Возможный дубликат [Назначение переменной в условии «если»] (http://stackoverflow.com/questions/17681535/variable-assignment-in-if-condition) – Nemo
Не имеет ли это неопределенного поведения, поскольку 'push_back' может перераспределять и тогда итераторы, используемые циклом, основанным на диапазоне, будут недействительными? Не говоря уже о том, что он будет добавлять новый элемент много раз. –