在给定C++代码中,std::list的insert返回迭代器指向哪个元素?
关于std::list::insert返回迭代器的指向问题
嗨,我来帮你把这个点掰扯明白!
你写的这段代码:
listOfFoos::iterator new_foo_it = listOfFoos.insert(listOfFoos.end(), newFoo);
这里的insert操作返回的迭代器,指向的就是你刚刚插入的那个newFoo元素,可不是你传入的listOfFoos.end()位置(那是插入前的尾后迭代器,指向最后一个元素的后面)。
举个直观的例子:假设listOfFoos原本有元素[foo1, foo2, foo3],end()指向的是foo3之后的空位置。当你插入newFoo后,列表变成[foo1, foo2, foo3, newFoo],此时返回的new_foo_it就精准指向这个刚加入的newFoo,它现在是列表的新末尾元素。
你提到的listOfFoos.begin()是指向列表第一个元素的迭代器,和insert返回的迭代器指向完全不是一回事,这点要区分开哦。
顺便补充个小细节:因为std::list是双向链表结构,所以insert操作不会导致其他已存在的迭代器失效,这点和vector这类连续存储的容器不一样,你可以放心用其他迭代器做后续操作。
内容的提问来源于stack exchange,提问作者user3222669
相关产品推荐
相关产品推荐

