C++ list基本操作

list

将数据进行链式存储
链表(list)是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的
链表由一系列的节点组成
STL中的链表是一个双向循环链表

重点看看如何判断迭代器是否支持随机访问 和 逆序排序

1.构造函数:
list lst;
list(beg,end);
list(n,elem);
list(const list &lst);

2.赋值和交换:
assign(beg,end);
assign(n,elem);
list& operator=(const list &lst);
swap(lst);

3.大小操作:
size();
empty();
resize(num);
resize(num,elem);

4.插入和删除:
push_back(elem);
push_front(elem);
pop_back();
pop_front();

insert(pos,elem);
insert(pos,n,elem);
insert(pos,beg,end);

clear();
erase(beg,end)
erase(pos);//删除pos位置的数据

remove(elem);//删除容器中所有与elem值匹配的元素

5.数据存取:(不可以用 [] 或 at方式 访问list容器中的元素,因为list不是连续线性空间存储数据,
迭代器也是不支持随机访问的)

front();
back();

#include 
using namespace std;
#include 


int main()
{
    int i;
    list<int> l1;
    for(i=0;i<10;i++){
        l1.push_back(i);

    }
    list<int>::iterator it=l1.begin();

    //验证迭代器是不支持随机访问的
    it++;//支持双向
    it--;
    it+=1;//会报错,不支持随机访问 因为++、--是一个一个递进的,而+=意味着你可以加3,加4(随意加一个数)

    return 0;
}

6.反转和排序:
reverse();
sort();

#include 
using namespace std;
#include 

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

bool mycompare(int v1,int v2)
{
    return v1>v2;
}
void test01()
{
    int i;
    list<int> l1;
    for(i=2;i<8;i++){
        l1.push_back(i);
    }
    l1.push_back(0);
    l1.push_front(20);
    //20 2 3 4 5 6 7 0
    print(l1);

    //反转
    l1.reverse();
    //0 7 6 5 4 3 2 20
    print(l1);

    //排序
    //所有不支持随机访问迭代器的容器,不可用标准算法
    //不支持随机访问迭代器的容器,内部会提供对应的一些算法

    //sort(l1.begin(),l1.end());//报错
    l1.sort();//正序
    print(l1);

    //逆序
    l1.sort(mycompare);
    print(l1);
}
int main()
{
    test01();
    return 0;
}

你可能感兴趣的:(C++学习)