[OOP]STL-list

list: 封装链表相关的功能

http://joshliu357.8910.io/wordpress/wp-content/uploads/2018/08/%E6%8D%95%E8%8E%B7.png

链表不能随机访问,只能按顺序链式访问,所以,只能使用迭代器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;
}

 

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注