STL вектор присваивать против вставки - PullRequest
4 голосов
/ 22 января 2010

Я понимаю семантику 2 операций, присваивает перед заменой на заданные значения. insert - вставляет значения в указанное место (при необходимости выделяет новую память).

Кроме этого, есть ли причина отдавать предпочтение одному другому? Или, другими словами, есть ли причина использовать assign вместо insert.

Ответы [ 4 ]

6 голосов
/ 22 января 2010

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

4 голосов
/ 22 января 2010

Если вы хотите вызвать семантику assign, вызовите assign - если вы хотите вызвать семантику insert, вызовите insert. Они не являются взаимозаменяемыми.

Что касается вызова их для пустого вектора, единственное отличие состоит в том, что вам не нужно указывать итератор для вставки при вызове assign. Может быть разница в производительности, но это зависит от реализации и почти наверняка незначительно.

3 голосов
/ 22 января 2010

assign() сместит все, что уже есть в vector, затем добавит новые элементы. insert() не касается элементов уже в vector.

Кроме этого, если vector, который вы модифицируете, начинается пустым, то разница невелика.

1 голос
/ 24 апреля 2019

insert () вставит элементы в определенную позицию. Это может быть одно значение или несколько значений с использованием первого и последнего итераторов. Это как вставить больше элементов перед позицией.

assign () будет просто присваивать значения, начиная с начала и до конца, согласно входным наборам «InputIterator first и InputIterator last» Это удалит все существующие элементы и вместо этого заполнит вектор новыми значениями согласно диапазону, указанному в его аргументах.

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