Ответ 1
a.push_back(x)
определяется как идентичная семантика для (void)a.insert(a.end(),x)
для контейнеров последовательностей, которые его поддерживают.
См. таблицу 68 в ISO/IEC 14882: 2003 23.1.1/12 [lib.sequence.reqmts].
Я пишу небольшой фрагмент кода, где мне придется вставлять значения в вектор STL STL в определенном месте в зависимости от значений в векторных элементах. Я использую функцию insert()
, чтобы выполнить это. Я понимаю, что когда я хочу добавить новый элемент в конец вектора, я мог бы просто использовать push_back()
. Но чтобы мой код выглядел хорошо, я хотел бы использовать исключительно insert()
, который принимает в качестве входного значения итератор, указывающий на элемент после желаемой точки вставки и значение, которое нужно вставить. Если значение итератора передано как аргумент v.end()
, где v
- мой вектор, будет ли он работать так же, как push_back()
?
Спасибо большое!
a.push_back(x)
определяется как идентичная семантика для (void)a.insert(a.end(),x)
для контейнеров последовательностей, которые его поддерживают.
См. таблицу 68 в ISO/IEC 14882: 2003 23.1.1/12 [lib.sequence.reqmts].
Есть небольшая разница, что 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)
, чтобы увидеть, вызвали ли они одну и ту же функцию вставки) в конце.