Использование C ++ vector :: insert () для добавления в конец вектора - PullRequest
53 голосов
/ 11 мая 2011

Я пишу небольшой фрагмент кода, в котором мне нужно будет вставлять значения в вектор C ++ STL в определенном месте, в зависимости от значений в векторных элементах.Я использую функцию insert() для достижения этой цели.Я понимаю, что когда я хочу добавить новый элемент в конец вектора, я могу просто использовать push_back().Но чтобы мой код выглядел хорошо, я бы хотел использовать исключительно insert(), который принимает в качестве входных данных итератор, указывающий на элемент после желаемой точки вставки и значения, которое нужно вставить.Если значение итератора, переданного в качестве аргумента, равно v.end(), где v - мой вектор, будет ли это работать так же, как push_back()?

Большое спасибо!

Ответы [ 2 ]

90 голосов
/ 11 мая 2011

a.push_back(x) определено , определено , чтобы иметь семантику, идентичную (void)a.insert(a.end(),x) для контейнеров последовательностей, которые его поддерживают.

См. Таблицу 68 в ИСО / МЭК 14882: 2003 23.1.1 / 12[lib.sequence.reqmts].

15 голосов
/ 11 мая 2011

Существует небольшая разница в том, что push_back возвращает void, возвращает ли insert iterator только что вставленный элемент.

Кстати, есть еще один способ проверить, делают ли они одно и то же: скомпилируйте следующие коды

int main()
{
    std::vector<int const> v;
    v.push_back(0);
    return 0;
}

компилятор напечатает много надоедливых сообщений, просто прочитайте, и вы найдете push_back вызовы insert (если нет, попробуйте скомпилировать v.insert(v.end(), 0), чтобы посмотреть, вызывают ли они одну и ту же функцию вставки).

...