list: 封装链表相关的功能
链表不能随机访问,只能按顺序链式访问,所以,只能使用迭代器iterator
list<T>::iterator, list内的迭代器
list比vector用适合插入删除操作
list链表中插入/删除一个节点
遍历list,找到目标位置
调用insert/erase,插入/删除一个节点
vector可有可无,但list不可或缺
vector不常用到,使用普通的数组完全没有问题。
list经常用到,如果没有list,那么每个链表都需要从头写起,非常麻烦。
#include <stdio.h> #include <string.h> #include <list> using namespace std; int main() { list<int> lst; lst.push_back(1); lst.push_front(3); lst.push_front(2); //lst.pop_back(); for(list<int>::iterator iter = lst.begin(); iter != lst.end(); iter ++) { int& value = *iter; printf("%d, ", value); } // 删除值为3的节点 for(list<int>::iterator iter = lst.begin(); iter != lst.end(); iter ++) { int& value = *iter; if(value == 3) { lst.erase(iter); break; } } return 0; }
#include <stdio.h> #include <string.h> #include <list> using namespace std; class Object { public: Object() { } Object(int id, const char* name) { this->id = id; strcpy(this->name, name); } public: int id; char name[32]; }; int main() { list<Object> lst; lst.push_back(Object(1, "shaofa")); lst.push_back(Object(2, "xxxx")); lst.push_back(Object(3, "yyyy")); for(list<Object>::iterator iter = lst.begin(); iter != lst.end(); iter ++) { Object& value = *iter; printf("%d, %s \n", value.id, value.name); } return 0; }