В следующем коде, который более эффективен, вызывает изменение размера или стирание?, который быстрее использует стирание или изменение размера в векторе?
vector<int> a(5000);
//....
vector<int>::iterator it = remove(a.begin(),a.end(),8)
a.resize(std::distance(a.begin(),it));
//or
a.erase(it,a.end());
Я думаю, что это зависит от количества дублирующих элементов?
Оба являются субоптимальными, так как для сохранения данных смежно требуется 'vector': знак того, что вы не используете соответствующий контейнер. – Bathsheba
@Bathsheba Кажется, это подходящий контейнер для меня. Как правило, очень мало случаев, когда вы должны использовать что-либо другое, кроме 'std :: vector' (для неассоциативного контейнера). –
Вы не предоставляете никаких подробностей, поэтому нет единого ответа. Номинально, если вы хотите удалить отдельные элементы одновременно, может оказаться более эффективным использование идиомы удаления-стирания, которая по сути делает то же самое в большинстве реализаций. Однако, поскольку он работает путем разбиения вектора (свопинг каждого совпадения с обратной стороной первого раздела), он может выполнять последовательное перемещение по массе в зависимости от реализации и использования. – kfsone