В опубликованном вами коде
(**it) = string("asd");
вызывает неопределенное поведение.
*iter
является итератором, но соответствующий vector
не существует к тому времени, когда вы достигнете этой строки. Следовательно, **iter
аналогично разыменованию висячего указателя. Кстати, это не изменится, если вы будете использовать iterator
вместо iterator*
.
Следующий код также вызывает неопределенное поведение.
vector <string>::iterator it;
{
vector <string> v{"asd", "asd"};
auto iter = v.begin();
it = iter;
}
(*it) = string("asd");