Подтвердить что ты не робот

Использование С++ vector:: insert() для добавления к концу вектора

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

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

4b9b3361

Ответ 1

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

См. таблицу 68 в ISO/IEC 14882: 2003 23.1.1/12 [lib.sequence.reqmts].

Ответ 2

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

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

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

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