2015-01-26 2 views
1

Метод вставки для контейнеров STL принимает два аргумента: итератор, указывающий, куда вставлять, и значение для вставки. Зная, что метод insert определяет, что вновь вставленное значение будет вставлено перед значением, на которое в настоящее время ссылается итератор.C++ Vector and Insertion

Почему бы не уместно определить, что вставка помещает новое значение после текущего значения?

+1

Вероятно, что-то связано с 'size_t' и индексом 0, по моим предположениям. Вставка в 0 требует, чтобы 'size_t' принимал значение -1 (не без знака), предполагая, что векторные итераторы являются фактически обернутыми индексами (что имело бы смысл, учитывая базовый массив). Если вы думаете о 'std :: vector :: insert' как о« вставке в ... », функциональность имеет смысл. – Conduit

+4

Если бы это было так, вы никогда не могли вставлять в позицию 0, потому что нет значения, которое указывает перед началом списка. –

ответ

0

Вновь вставленный метод будет в положении, на которое указывает итератор, все остальное будет «нажато в следующую позицию».

Если вы поместите его мимо текущего пункта, то вы на самом деле вставки в итератора + 1

+0

Подумайте об этом так. Если бы я сказал вам сделать что-то 5-м предметом в векторе, вы бы не сделали его 6-м правилом? –

0

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

Если вместо этого элемент был вставлен после, как вы могли бы вставить в начале вектора в качестве первого элемента?

Используя текущую схему, элементы можно вставлять в любом месте. Но в соответствии с предлагаемой вами альтернативой вы не можете вставлять в начале без специального случая.

0
  1. Потому что тогда вы не смогли бы выполнить вставку в начале, написав:

    vect.insert(vect.begin(), value); 
    
  2. Потому что тогда вы не сможете легко выполнить вставку в конце по написание

    vect.insert(vect.end(), value); 
    

После выполнения указанных выше операций нового значения фактически на начала/конца (как оценить d после вставки, итераторы перед вставкой могут быть признаны недействительными), как говорит код. Если вы определили insert любым другим способом, вам придется обходиться с +1/-1.