Ошибка при стирании элемента в мультимножестве c ++ [duplicate]

  1. Используйте это: URLEncoder.encode (query, StandardCharsets.UTF_8.displayName ()); или это: URLEncoder.encode (запрос, «UTF-8»);
  2. Вы можете использовать следующий код.
    String encodedUrl1 = UriUtils.encodeQuery(query, "UTF-8");//not change 
    String encodedUrl2 = URLEncoder.encode(query, "UTF-8");//changed
    String encodedUrl3 = URLEncoder.encode(query, StandardCharsets.UTF_8.displayName());//changed
    
    System.out.println("url1 " + encodedUrl1 + "\n" + "url2=" + encodedUrl2 + "\n" + "url3=" + encodedUrl3);
    
10
задан evertheylen 7 January 2017 в 23:12
поделиться

1 ответ

Стандартный способ - сделать что-то вроде

for(set<T>::iterator iter = s.begin(); iter != s.end();)
{
   if(/*some condition*/)
   {
      s.erase(iter++);
   }
   else
   {
      ++iter;
   }
}

. По первому условию мы уверены, что iter в любом случае не будет признан недействительным, так как копия iter будет передана в стирание , но наш iter уже увеличивается, прежде чем вызывается стирание.

В C ++ 11 код будет как

for(set<T>::iterator iter = s.begin(); iter != s.end();)
{
   if(/*some condition*/)
   {
      iter = s.erase(iter);
   }
   else
   {
      ++iter;
   }
}
17
ответ дан stafusa 20 August 2018 в 11:09
поделиться
  • 1
    Первый фрагмент кода не соответствует утверждению о том, что итераторы несовместимы в визуальном исследовании. В любом случае std :: erase возвращает новый итератор, как вы указали в своем коде. – sajas 17 December 2013 в 08:53
Другие вопросы по тегам:

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