C++的list容器->基本概念、构造函数、赋值和交换、大小操作、插入和删除、数据存取、反转和排序、排序案例

#include<iostream>
using namespace std;
#include <list>

//list容器构造函数

void printList(const list<int>& L)
{
    for (list<int>::const_iterator it = L.begin(); it != L.end(); it++)
    {
        cout << *it << " ";
    }
    cout << endl;
}
//赋值和交换
void test01()
{
    //创建list容器
    list<int>L1;//默认构造
    //添加数据
    L1.push_back(10);
    L1.push_back(20);
    L1.push_back(30);
    L1.push_back(40);
    //遍历容器
    printList(L1);
    //拷贝构造
    list<int>L2(L1);
    printList(L2);
    //区间方式构造
    list<int>L3(L2.begin(), L2.end());
    printList(L3);
    //n个elem
    list<int>L4(10, 100);
    printList(L4);

}
int main()
{
    test01();
    system("pause");
    return 0;
}

#include<iostream>
using namespace std;
#include <list>

//list容器赋值和交换

void printList(const list<int>& L)
{
    for (list<int>::const_iterator it = L.begin(); it != L.end(); it++)
    {
        cout << *it << " ";
    }
    cout << endl;
}

//赋值
void test01()
{
    list<int>L1;
    L1.push_back(10);
    L1.push_back(20);
    L1.push_back(30);
    L1.push_back(40);
    printList(L1);
    //赋值
    list<int>L2;
    L2 = L1;//operator= 赋值
    printList(L2);

    list<int>L3;
    L3.assign(L2.begin(), L2.end());
    printList(L3);

    list<int>L4;
    L4.assign(10, 100);
    printList(L4);

}
//交换
void test02()
{
    list<int>L1;
    L1.push_back(10);
    L1.push_back(20);
    L1.push_back(30);
    L1.push_back(40);

    list<int>L2;
    L2.assign(10, 100);

    cout << "交换前: " << endl;
    printList(L1);
    printList(L2);

    cout << endl;

    L1.swap(L2);

    cout << "交换后: " << endl;
    printList(L1);
    printList(L2);

}

int main()
{
    //test01();
    test02();
    system("pause");
    return 0;
}

#include<iostream>
using namespace std;
#include <list>

//list大小操作

void printList(const list<int>& L)
{
    for (list<int>::const_iterator it = L.begin(); it != L.end(); it++)
    {
        cout << *it << " ";
    }
    cout << endl;
}

//大小操作
void test01()
{
    list<int>L1;
    L1.push_back(10);
    L1.push_back(20);
    L1.push_back(30);
    L1.push_back(40);
    //判断容器是否为空
    if (L1.empty())
    {
        cout << "L1为空" << endl;
    }
    else
    {
        cout << "L1不为空" << endl;
        cout << "L1的大小为: " << L1.size() << endl;
    }
    //重新指定大小
    L1.resize(10);
    printList(L1);

    L1.resize(2);
    printList(L1);
}

int main()
{
    test01();
    system("pause");
    return 0;
}

#include<iostream>
using namespace std;
#include <list>
//list插入和删除
/*
* push_back(elem);     //在容器尾部加入一个元素
* pop_back();          //删除容器中最后一个元素
* push_front(elem);    //在容器开头插入一个元素
* pop_front();         //从容器开头移除第一个元素
* insert(pos,elem);    //在pos位置插elem元素的拷贝,返回新数据的位置。
* insert(pos,n,elem);  //在pos位置插入n个elem数据,无返回值。
* insert(pos,beg,end);//在pos位置插入[beg,end)区间的数据,无返回值。
* clear();            //移除容器的所有数据
* erase(beg,end);     //删除[beg,end)区间的数据,返回下一个数据的位置。
* erase(pos);         //删除pos位置的数据,返回下一个数据的位置。
* remove(elem);       //删除容器中所有与elem值匹配的元素。

*/
void printList(const list<int>& L)
{
    for (list<int>::const_iterator it = L.begin(); it != L.end(); it++)
    {
        cout << *it << " ";
    }
    cout << endl;
}

//插入和删除
void test01()
{
    list<int> L;
    //尾插
    L.push_back(10);
    L.push_back(20);
    L.push_back(30);
    //头插
    L.push_front(100);
    L.push_front(200);
    L.push_front(300);

    printList(L);
    //尾删
    L.pop_back();
    printList(L);
    //头删
    L.pop_front();
    printList(L);
    //插入
    list<int>::iterator it = L.begin();
    L.insert(++it, 1000);
    printList(L);
    //删除
    it = L.begin();
    L.erase(++it);
    printList(L);
    //移除
    L.push_back(10000);
    L.push_back(10000);
    L.push_back(10000);
    printList(L);
    L.remove(10000);
    printList(L);
    //清空
    L.clear();
    printList(L);
}

int main()
{
    test01();
    system("pause");
    return 0;
}

#include<iostream>
using namespace std;
#include <list>

//list容器 数据存取
void test01()
{
    list<int>L1;
    L1.push_back(10);
    L1.push_back(20);
    L1.push_back(30);
    L1.push_back(40);
    
    //cout << L1.at(0) << endl;//错误 不支持at访问数据
    //cout << L1[0] << endl;  //错误  不支持[]方式访问数据
    //原因是list本质链表,不是用连续线性空间存储数据,迭代器也是不支持随机访问的
    cout << "第一个元素为: " << L1.front() << endl;
    cout << "最后一个元素为: " << L1.back() << endl;

    //list容器的迭代器是双向迭代器,不支持随机访问
    list<int>::iterator it = L1.begin();
    it++;//支持双向
    it--;
    //it = it + 1;//错误,不可以跳跃访问,即使是+1,不支持随机访问
}

int main()
{
    test01();
    system("pause");
    return 0;
}

#include<iostream>
using namespace std;
#include <list>

//list容器反转和排序
void printList(const list<int>& L)
{
    for (list<int>::const_iterator it = L.begin(); it != L.end(); it++)
    {
        cout << *it << " ";
    }
    cout << endl;
}

bool myCompare(int val1 , int val2)
{
    //降序  就让第一个数>第二个数
    return val1 > val2;
}

//反转和排序
void test01()
{
    list<int> L;
    L.push_back(90);
    L.push_back(30);
    L.push_back(20);
    L.push_back(70);
    printList(L);

    //反转容器的元素
    L.reverse();
    printList(L);

    //所有不支持随机访问迭代器的容器,不可以用标准算法
    //不支持随机访问迭代器的容器,内部会提供对应一些算法
    //排序
    L.sort(); //默认的排序规则 从小到大  升序
    printList(L);

    L.sort(myCompare); //指定规则,从大到小
    printList(L);
}

int main()
{
    test01();
    system("pause");
    return 0;
}

#include<iostream>
using namespace std;
#include <list>
#include<string>

//list容器  排序案例 对于自定义数据类型  做排序
//按照年龄进行升序,如果年龄相同按照身高进行降序
class Person
{
public:
    Person(string name, int age , int height)
    {
        this->m_Name = name;
        this->m_Age = age;
        this->m_Height = height;
    }

public:
    string m_Name;  //姓名
    int m_Age;      //年龄
    int m_Height;   //身高
};


bool ComparePerson(Person& p1, Person& p2)
{

    if (p1.m_Age == p2.m_Age) //年龄相同  按照身高降序
    {
        return p1.m_Height  > p2.m_Height;
    }
    else  //按照年龄  升序
    {
        return  p1.m_Age < p2.m_Age;
    }

}

void test01()
{

    list<Person> L;//创建容器
    //准备数据
    Person p1("刘备", 35 , 175);
    Person p2("曹操", 45 , 180);
    Person p3("孙权", 40 , 170);
    Person p4("赵云", 25 , 190);
    Person p5("张飞", 35 , 160);
    Person p6("关羽", 35 , 200);
    //插入数据
    L.push_back(p1);
    L.push_back(p2);
    L.push_back(p3);
    L.push_back(p4);
    L.push_back(p5);
    L.push_back(p6);

    for (list<Person>::iterator it = L.begin(); it != L.end(); it++)
    {
        cout << "姓名: " << it->m_Name << " 年龄: " << it->m_Age
              << " 身高: " << it->m_Height << endl;
    }

    cout << "---------------------------------" << endl;
    L.sort(ComparePerson); //排序

    for (list<Person>::iterator it = L.begin(); it != L.end(); it++)
    {
        cout << "姓名: " << it->m_Name << " 年龄: " << it->m_Age
              << " 身高: " << it->m_Height << endl;
    }
}

int main()
{
    test01();
    system("pause");
    return 0;
}

  • 20
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

�西瓜�

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值