list:封装了与链表相关的功能,可以对两端进行操作。
push_back():向末尾添加一个元素
pop_back():删除末尾的结点
push_front():在头部插入一个元素
pop_front():删除头部结点
这四个都是速度较快的操作,不需要遍历
int main()
{
list<int> lst;
lst.push_back(1);
lst.push_back(2);
lst.pop_back;
return 0;
}
size():用于取得list中的结点个数。
clear():用于清空list。
front():得到头元素的引用
back():得到尾元素的引用
iterator:和vector的使用方法类似。
链表不能随机访问,所以只能顺序访问,只能使用迭代器访问。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<list>
using namespace std;
int main()
{
list<int> lst;
lst.push_back(1);
lst.push_back(2);
lst.push_back(3);
for(list<int>::iterator iter = lst.begin();iter != lst.end();iter++)
{
int& value = *iter;
printf("%d ",value);
}
return 0;
}
inser():插入一个节点
erase():删除一个节点
list比vector更适合插入删除操作
(1)遍历list,找到位置
(2)进行插入删除操作
int main()
{
list<int> lst;
lst.push_back(1);
lst.push_back(2);
lst.push_back(3);
删除值为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;
}