C++STL库中list容器常用函数大全(对自定义类型进行操作)

声明:为了文章简洁  本文多采用函数原型加代码示例的方式

本文使用的类源码和对象数据如下:

目录

构造函数

赋值和交换

大小操作

插入和删除

迭代器偏移操作:

数据存取

对自定义类型进行读取

反转和排序


class person
{
public:
	string m_name;
	int m_age;

	person(string name, int age)
	{
		this->m_name = name;
		this->m_age = age;
	}
};


	person p1("孙悟空",199);
	person p2("唐僧", 29);
	person p3("沙僧", 299);
  1. list容器不支持随机访问迭代器  就是说只能对头尾进行访问操作  或者对迭代器进行++ --操作取访问指定位置
  2. 所有不可随机访问的迭代器都不可使用标准算法(如sort) 其内部会提供相关成员函数

        (具体可见 反转与排序)

构造函数

  • list lst1;       //T为任意数据类型
  • list lst2(const list& lst1);       //拷贝构造函数
  • list lst3(lst1.begin() , lst1.end());    //拷贝某链表区间数据
    list lst1;
	list lst2(lst1);
	list lst3(lst1.begin(), lst1.end());

赋值和交换

  • operator=(const list& lst);           //等号运算符重载
  • assign(int n , elem);                   //赋值n个elem
  • swap(lst);                                   //交换链表
 
    person p1("孙悟空",199);

    
    lst1 = lst2;
    lst1.assign(5, p1);
	lst1.assign(lst2.begin(), lst2.end());
	lst1.swap(lst2);

大小操作

  • int size();                                        //判断容器中元素个数
  • bool empty();                                    //判断list容器是否为空     为空返回true
  • resize( int num );                     

                 //预留num个空间   比原来空间大则填充默认值0 自定义类型的所有属性都为0

                //                              比原来空间少则删除最后的元素

  • resize( int num , elem );  //同上 默认填充值为elem
    lst1.size();
	lst1.empty();
	lst1.resize(8);
	lst1.resize(8, p1);

插入和删除

//对两端进行操作

  • void push_back(T);        //将数据存入链表最后
  • void push_front(T);        //将数据存入链表最前
  • void pop_back();            //将链表最后的数据删除
  • void pop_front();            //将链表最前的数据删除
	Li1.push_back(p1);
	Li1.push_front(p2);

	Li1.pop_back();
	Li1.pop_front();

//对其它位置进行操作

  • insert(pos , elem);                //pos为迭代器  表示在pos位置插入元素elem
  • insert(pos , begin , end);     //三个参数都是迭代器   表示在pos处插入[begin,end)元素
  • erase(begin , end);             //删除[begin , end)元素
  • erase( pos );                       //删除pos处位置
  • clear();                                //清空容器数据
  • remove( elem );                  //删除于elem相等的数据

迭代器偏移操作:

list容器迭代器不支持随机访问 只能进行++或--

	lst1.assign(4, p1);
	lst2.assign(4, p2);
	
	lst1.insert(lst1.begin()++, p3);
	lst1.insert(lst1.begin()++, lst2.begin(), lst2.end());
	
	lst1.erase(lst1.begin()++, lst1.end()--);
	lst1.erase(lst1.begin()++);
	lst1.clear();

	lst1.remove(p1);

数据存取

  • front();
  • back();

list迭代器不支持对数据的随机访问 只能访问头尾或对迭代器进行++ --操作

因为链表的数据存储不是连续的空间

对自定义类型进行读取


	cout << lst1.front().m_name << " " << lst1.front().m_age << endl;;
	cout << lst1.back().m_name << " " << lst1.back().m_age << endl;;

反转和排序

  • reverse();        反转
  • sort();              排序
lst1.reverse();

sort(cmp);
bool cmp(person a, person b)
{
    //按年龄从大到小排序
	return a.m_age > b.m_age;
}

你可能感兴趣的:(c++,STL函数库,c++,开发语言)