1 迭代器细节问题大家可暂时将迭代器理解成一个指针该指针指向list中的某个节点。在list中进行插入时是不会导致list的迭代器失效的只有在删除时才会失效并且失效的只是指向被删除节点的迭代器其他迭代器不会受到影响。一个容器通常会提供几种不同“用法”的迭代器。const_iterator常量迭代器只能读不能改元素。vectorint v {1, 2, 3}; vectorint::const_iterator it v.begin(); // *it 10; // 错误不能通过 const_iterator 修改元素 cout *it endl;reverse_iterator:反向迭代器从后往前遍历。vectorint v {1, 2, 3}; for (auto it v.rbegin(); it ! v.rend(); it) { cout *it ; } 3 2 1 虽然是反向遍历但写法仍然是 it。因为“反向迭代器的 ”表示朝前一个元素走下面的性质其实是在说迭代器能支持哪些移动操作。底层结构决定了使用了哪些算法意思是算法对迭代器有要求。而容器能提供什么级别的迭代器取决于它的底层结构。所以容器能不能用某个算法本质上是由底层结构决定的。举个简单例子sort(v.begin(), v.end()); vector可以 listint lst {3, 1, 2}; sort(lst.begin(), lst.end()); // 但对于list是错误的 为什么错因为 std::sort 要求 随机访问迭代器而 list 只有双向迭代器不够强所以不能用。 但是 list 自己有成员函数lst.sort()因为 list 可以用适合链表的方式自己排序。2 list的底层结构为带头结点的双向循环链表