您的位置:首页 > 编程语言 > C语言/C++

【C++】list的使用方法

2017-09-03 20:17 239 查看
list是一种序列式容器。list容器完成的功能实际上和数据结构中的双向链表是极其相似的,list中的数据元素是通过链表指针串连成逻辑意义上的线性表,也就是list也具有链表的主要优点,即:在链表的任一位置进行元素的插入、删除操作都是快速的。 与vector相比, 它允许快速的插入和删除,但是随机访问却比较慢.

首先我们来看一下list都有哪些接口:



list中常用的函数

front() 返回第一个元素

back():返回最后一个元素

注意:list中元素是空的时候,这时候调用front()和back()会发生什么呢?实际上会发生不能正常读取数据的情况,但是这并不报错,那我们编程序时就要注意了,个人觉得在使用之前最好先调用empty()函数判断list是否为空。

begin():返回指向第一个元素的迭代器,通过调用list容器的成员函数begin()得到一个指向容器起始位置的iterator

end() 返回末尾的迭代器 ,可以调用list容器的 end() 函数来得到list末端下一位置。

pop_back():删除最后一个元素

pop_front():删除第一个元素

push_back():在list的末尾添加一个元素

push_front():在list的头部添加一个元素

void print_list(const list<int>& l)
{
list<int>::const_iterator it = l.begin();
while (it != l.end()) //end()相当于:int a
中的第n+1个位置a
,实际上是不存在的,不能访问,经常作为循环结束判断结束条件使用
{
cout << *it << " ";
++it;
}
cout << endl;
}
void test_list()
{
list<int> l;

//从头部向list中插入数据
l.push_front(3);
l.push_front(2);
l.push_front(1);

//从尾部向list中插入数据
l.push_back(4);
l.push_back(5);
l.push_back(6);
print_list(l);

//从头部删除数据
l.pop_front();

//从尾部删除数据
l.pop_back();

print_list(l);

//获取第一个元素和最后一个元素
cout << "第一个元素:" << l.front() << endl;
cout << "最后一个元素:" << l.back() << endl;
}


运行结果:



assign():给list赋值

void test_list()
{
list<int> l1;
l1.push_back(1);
l1.push_back(2);
l1.push_back(3);
l1.push_back(4);
l1.push_back(5);

//将 l1中元素变为3个10。
l1.assign(3, 10);
print_list(l1);

list<int> l2;
l2.push_back(7);
l2.push_back(8);
l2.push_back(9);
l2.push_back(10);

//将l2中的从l2.begin()到l2.end()之间的数值赋值给l1
l1.assign(l2.begin(), l2.end());
print_list(l1);
}


clear():删除所有元素

empty():判断list是否为空,如果list是空的则返回true

erase(): 删除一个元素

//将l1的第一个元素删除。
l1.erase(l1.begin());
// 将l1的从begin()到end()之间的元素删除
l1.erase(l1.begin(), l1.end());


insert():插入一个元素到list中

//在l1的开始位置插入100。
l1.insert(l1.begin(), 100);
//在l1的开始位置插入2个100。
l1.insert(l1.begin(), 2, 100);
//在l1的开始位置插入l2的从开始到结束的所有位置的元素
l1.insert(l1.begin(), l2.begin(), l2.end());


max_size():返回list能容纳的最大元素大小

list<int> l1;
cout << l1.max_size() << endl;




merge():合并两个list

void test_list()
{
list<int> l1;
l1.push_back(1);
l1.push_back(2);
l1.push_back(3);
print_list(l1);

list<int> l2;
l2.push_back(4);
l2.push_back(5);
l2.push_back(6);
l1.merge(l2);
print_list(l1);
print_list(l2);
}




remove():从list删除指定元素,如果该元素存在,则将list中的所有该元素删除,如果不存在,则不发生任何变化

list<int> l1;
l1.push_back(1);
l1.push_back(4);
l1.push_back(2);
l1.push_back(4);
l1.push_back(3);
l1.push_back(4);
print_list(l1);
l1.remove(4);
print_list(l1);
l1.remove(40);
print_list(l1);




resize():改变list的大小

reverse():把list的元素逆置

size():返回list中的元素个数

sort():给list排序

swap():交换两个list

unique():删除list中重复的元素

void test_list()
{
list<int> l1;
l1.push_back(3);
l1.push_back(1);
l1.push_back(2);
l1.push_back(4);
l1.push_back(4);
l1.push_back(2);
print_list(l1);

list<int> l2;
l2.push_back(4);
l2.push_back(5);
l2.push_back(6);

//将l1大小改为8
l1.resize(8);
cout << l1.size() << endl;

//逆置l1
l1.reverse();
print_list(l1);

//给l1排序
l1.sort();
print_list(l1);

//交换l1和l2
l1.swap(l2);
print_list(l1);

//删除l2中重复的元素
l2.unique();
print_list(l2);
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  list