какая функция быстрее push_back, вставьте в C ++ - PullRequest
3 голосов
/ 10 ноября 2011

Мне нужно вставить в конец вектора 2 элемента каждый раз.

Мне было интересно, быстрее ли делать vector.insert (iter_first, iter_second), чем vector.push_back (first), а затем vector?.push_back (second)?

Может быть, другой альтернативой будет создание такой структуры:

struct T{int a; int b;};
T t;
t.a = first;
t.b = second;
X.push_back(t);

Ответы [ 4 ]

6 голосов
/ 10 ноября 2011

Если два элемента логически связаны, то вы должны использовать структуру или класс. Если они не связаны, то, конечно, не группируйте их по причинам производительности.

Это пахнет преждевременной оптимизацией. Вместо этого напишите наиболее понятный код и позвольте компилятору сгенерировать код для вас. Вот для чего это. Учтите, что код, который легко читается, прост в обслуживании, а код, который легко обслуживать, легко реорганизовать и с меньшей вероятностью может привести к незначительным ошибкам в производительности из-за недопонимания.

2 голосов
/ 10 ноября 2011

Хотя в вашем случае разница незначительна, в общем случае стандарт языка C ++ определяет информацию о сложности, поэтому вам не нужно спрашивать - вы можете просто найти ее.vector::push_back имеет амортизированную постоянную сложность времени , а vector::insert либо пропорционально сумме количества вставленных элементов и количества перемещенных элементов, либо произведению двух, в зависимости откак ты это называешь .

0 голосов
/ 10 ноября 2011

Практически говоря, push_back будет вызывать insert, поэтому вызов push_back дважды приводит к вызову insert дважды.На практике, однако, если код был оптимизирован, я был бы удивлен, если бы это имело значение.Делайте то, что логично, и оптимизируйте позже, если у вас проблемы с производительностью.

0 голосов
/ 10 ноября 2011

Вставка в конце вектора будет намного быстрее, чем вставка в середине или начале вектора.

Это имеет значение, только если у вас есть Большой вектор и / или конструкторы копирования ваших объектов Невероятно болезненные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...