У меня есть вектор векторов (матрица) пользовательского типа, my_type
, который является структурой и содержит целые числа a, b и c. Я хочу определить функцию, которая находит элемент этой матрицы по значению b и удалить элемент. Поскольку функция не знает значения c, я определил итератор it
сначала найти этот элемент, а затем установить его адрес указателя на итератор it_found
так что его можно использовать в методе erase (). Тем не менее, программа выдала ошибку, Program received signal EXC_BAD_ACCESS, Could not access memory,
когда it_found
используется. Что вызывает эту ошибку?
bool remove_V(int a, int b) {
typename std::vector<my_type>::iterator it;
typename std::vector<my_type>::iterator it_found;for(it = V.at(a).begin(); it != V.at(a).end(); ++it){
if ((*it).b == 1) {
it_found == it;
std::cerr << (*it).b << "\n";
std::cerr << (*it_found).b << "\n";
}
}
}
Я думаю:
it_found == it;
^^^^
должно быть:
it_found = it;
^^^
В противном случае вы разыменовываете итератор, который не указывает на что-либо действительное.
Кроме того, вы можете использовать Удалить-стереть идиома.
Вы не инициализируете it_found
поэтому к любой стоимости (*it_found)
выдает ошибку. Я думаю, что вы имели в виду:
it_found = it;
вместо
it_found == it;