Можно ли с уверенностью предположить, что обратный () вектор является итератором End () после pop_back ()?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Можно ли с уверенностью предположить, что обратный () вектор является итератором End () после pop_back ()?

Сообщение Anonymous »

Моя проблема-следующая: < /p>

Код: Выделить всё

std::vector vec = { ... }; // Actually a member variable on a Server object

for (auto iter = vec.begin(); iter != vec.end(); ) {
if (client_closed_connection(*iter)) {
*iter = std::move(*vec.back()); // Move item to delete to the end
vec.pop_back(); // perform deletion
// Dont increment cause we dont want to skip the newly moved element
} else {
process_client_request(*iter);
iter++;
}
}
< /code>
Я не использую идиома «удалить и стирать» или аналогично, потому что порядок элементов не имеет значения, поэтому я не хочу тратить ресурсы, пытаясь сохранить его (его код для списка Epoll () FDS клиентов, подключенных к серверу, так что удаление, в то время как итерация вектора ожидается, и это часто бывает, что у меня возникает у клиентов, и это станет для клиентов, и это станет для меня, и это будет очень часто, и это будет очень часто, и это будет очень часто, и это будет очень часто. Работаю на практике, я не могу не задаться вопросом, потенциально ли я полагаюсь на UB.
Единственная проблема, если client_closed_connection () 
возвращает false для последнего достоверного элемента (для When iter == Back () )
В этом случае, *iter = std :: evel ( *vec.back). Назначение), но затем мы pop_back () , который в соответствии с итератором cppRefernce «Invalidate итератор к последнему элементу, а также end () итератор».
В нашем случае итератор , таким образом, был бы недействительным, но затем сравнивается с vec.end () , чтобы завершить цикл. />
  • «Несильтированное» просто означает, что я не могу преодолеть итератор? (Что было бы хорошо, так как я только сравниваю его с End ())
    Я Гвафун, что iter == end () Поскольку Vector использует Legacyrandomaccessiterator, Contigound_iterator в качестве типа итератора и из -за согласованного требования памяти, end () всегда будет равным для итератора

    Подробнее здесь: https://stackoverflow.com/questions/797 ... iterator-a
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»