Using C++ vector::insert() to add to end of vector

a.push_back(x) is defined to have identical semantics to (void)a.insert(a.end(),x) for sequence containers that support it.

See table 68 in ISO/IEC 14882:2003 23.1.1/12 [lib.sequence.reqmts].

Screenshot of Table 68 taken from International Standard ISO/IEC 14882:2003 at https://cs.nyu.edu/courses/fall11/CSCI-GA.2110-003/documents/c++2003std.pdf

Regarding the running time of vector.push_back(x) vs. vector.insert(vector.end(), x) consider the emphasized part:

Table 68 lists sequence operations that are provided for some types of sequential containers but not others. An implementation shall provide these operations for all container types shown in the ‘‘container’’ column, and shall implement them so as to take amortized constant time.


There is a slight difference that push_back returns void whether insert returns iterator to element just inserted.

By the way, there is another way to verify whether they do the same thing: compile the following codes

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

the compiler will print a lot of annoying messages, just read and you will find push_back calls insert (if not, try compiling v.insert(v.end(), 0) to see if they call the same inserting function) in the end.