list链表2-操作函数和查找

1.操作函数

1.1 查

1)输出全部元素:循环、for_each()

2)输出单个元素:front()返回头元素,back()返回尾部元素

!!!不支持[]下标运算和at()函数

list<int> lis1(5, 8);
cout << lis1[2] << endl;

 实例代码:

list<int> lis1(5, 8);
list<int>::iterator ite;
ite = lis1.begin();
//迭代器循环,迭代器可以++、--但不能进行加法运算
for (; ite != lis1.end(); ite++)
{
    cout << *ite << "  ";
}
cout << "\n";

for_each(lis1.begin(), lis1.end(), Out);
cout << "\n";

//返回链表的第一个元素
cout << lis1.front() << endl;
//返回链表的最后一个元素
cout << lis1.back() << endl;

执行结果:

1.2 增

1)头增加一个元素:push_front(val);

2)尾部增加一个元素:push_back(val);

3)中间插入一个元素:

insert(ite, val);  //在链表的ite位置插入一个值为val的元素

insert(ite, num, val);   //在链表的ite位置插入num个值为val的元素

insert(ite, lis2.begin(), lis2.end());  //在链表的ite位置插入lis2链表的部分元素

list<int> lis1(5, 8);
list<int> lis2(5, 6);
list<int>::iterator ite1;
list<int>::iterator ite2;
ite1 = lis1.begin();
ite2 = lis2.begin();
lis1.push_front(1);
//在链表lis1的头部添加一个元素1
lis1.push_back(4);
//在链表lis1的尾部添加一个元素4
for_each(lis1.begin(), lis1.end(), Out);
cout << "\n";

ite1++;
ite1++;
lis1.insert(ite1, 3);
//在链表lis1的ite1的位置处插入一个元素3
for_each(lis1.begin(), lis1.end(), Out);
cout << "\n";
lis1.insert(ite1, 3, 2);
//在链表lis1的ite1的位置处插入3个元素2
for_each(lis1.begin(), lis1.end(), Out);
cout << "\n";
ite2++;
ite2++;
ite2++;
lis1.insert(ite1, ite2, lis2.end());
//在链表lis1的ite1的位置处插入链表lis2从ite2开始到末尾的元素
for_each(lis1.begin(), lis1.end(), Out);
cout << "\n";

执行结果:

结果分析:

首先在链表的头部和尾部添加一个1和一个4,这没有什么说的;在向链表lis1插入元素需注意迭代器指向的位置,同时与vector和string不同的是,list的迭代器不会失效,开始定义ite1指向lis1的第一个元素8,虽然头部已增加一个元素1了,但是迭代器还是指向的原始链表中的第1个8的位置,ite1自加两次,指向lis1的第3个8的位置处,在此位置插入元素3,因为插入了一个元素,ite1迭代器也向后移动了一位,指向元素3后面的那个8的位置处,然后插入3个元素2,迭代器移动3位到2后面那个8的位置处了,再插入2个元素6,此时迭代器移到了6后面的那个8的位置处了

1.3 删

1)头部删除:pop_front();

2)尾部删除:pop_back();

3)删除指定的元素:erase();

erase(ite);   //删除一个

erase(ite0, ite1);  //删除一段

4)删除全部元素:clear();

5)删除所有参数相同的元素:remove(val);

6)删除链表中重复的元素:unique();

猜你喜欢

转载自blog.csdn.net/qq_33757398/article/details/81490918