STL容器篇之list

简介: STL容器篇之list

list

这是C++中的链表,

主要学会使用增删改查

创建过程

#include<iostream>
#include<string>
#include<list>  //同样,使用容器,要是使用相对应的头文件
using namespace std;
class MM
{
private:
  int age;
  string name;
  string sex;
};
int main()
{
  //创建方式: list<数据方式> 对象
  list<int> ilist;    
  list<string> slist;
  list<MM> mm;
  //list也可以操作自定义类型(类名)
  system("pause");
  return 0;
}

头插与尾插以及删除

#include<iostream>
#include<string>
#include<list>
using namespace std;
int main()
{
  list<int> ilist;
  list<int> iilist;
  for (int i = 0; i < 4; i++)
  {
    ilist.push_back(i);  //尾插法
  }
  for (int i = 0; i < 4; i++)
  {
    iilist.push_front(i);  //头插法
  }
  for (auto& v : ilist)  //新版for循环
  {
    cout << v;
  }
  cout << endl;
  for (auto& v : iilist)
  {
    cout << v;
  }
  system("pause");
  return 0;
}

一边删除一边打印

//一边删除,一边打印
  while (!ilist.empty())  //list容器不为空
  {
    cout << ilist.front() << endl;  //打印首元素
    ilist.pop_front();              //尾插法

指定位置插入

这里主要要学会使用insert()函数,和find()算法

#include<iostream>
#include<list>
using namespace std;
int main()
{
  list<string> slist;
  slist.push_back("I");
  slist.push_back("you");
  //insert()插入函数    运用find()算法查找  find第一个参数和第二个参数表示查找的范围,第三个参数表示查找的东西,
  //find()算法,如果找到的话,返回的是迭代器,如果没有找到,返回的容器结束的位置
  //insert()第二个参数表示,需要插入的数据(在找到的数据的前面插入)
  //一般情况 insert()函数和find算法一起使用
  slist.insert(find(slist.begin(), slist.end(), "you"), "love");  
  for (auto& v : slist)
  {
    cout << v;
  }
}

指定位置删除

删除函数为erase()

sort()排序函数

reserve()反转函数

基本思路,跟指定位置插入数据差不多

include<iostream>
#include<list>
using namespace std;
int main()
{
  list<int> ilist;
  for (int i = 0; i < 4; i++)
  {
    ilist.push_front(i);
  }
  ilist.erase(find(ilist.begin(), ilist.end(), 3));
  ilist.sort();//排序算法(一般从小到大)
  ilist.reverse();//反转函数
  for (auto& v : ilist)
  {
    cout << v;
  }
  system("pause");
  return 0;
}

list容器操作自定义类型

这里的话,主要通过list容器写了2个功能

添加信息和打印信息

后面完整的项目,会在C++项目专栏中写到

//list操作自定义类型
#include<iostream>
#include<string>
#include<cstdlib>
#include<conio.h>
#include<list>
using namespace std;
class MM
{
public:
  MM() {}
  MM(int age,string name): age(age), name(name) {}
  friend ostream& operator << (ostream& out, MM& object)
  {
    out << object.age << "\t" << object.name << endl;
    return out;
  }
  friend istream& operator >> (istream& in, MM& object)
  {
    in >> object.age >> object.name;
    return in;
  }
private:
  int age;
  string name;
};
class mm
{
public:
  void menu();
  void keyDown();
  void insertDate();
  void printDate();
private:
  list<MM> mmdate;
};
void mm::menu()
{
  cout <<"-----------------" << endl;
  cout << "0.退出系统" << endl;
  cout << "1.添加信息" << endl;
  cout << "2.浏览信息" << endl;
  cout << "-----------------" << endl;
}
void mm::keyDown()
{
  char message = _getch();
  switch (message)
  {
  case '0':
    exit(0); //退出函数
    break;
  case '1':
    insertDate();  //插入数据
    break;
  case '2':
    printDate();  //打印数据
    break;
  default:
    cout << "请在0--2中选择";
  }
}
void mm:: insertDate()
{
  cout << "请输入美女的年龄和姓名" << endl;
  MM mm1; 
  cin >> mm1;
  mmdate.push_back(mm1);
}
void mm::printDate()
{
  cout << "年龄\t" << "姓名\t" << endl;
  for (auto& v : mmdate)
  {
    cout << v;
  }
  cout << endl;
}
int main()
{
  mm* p = new mm;
  while (1)
  {
    p->menu();
    p->keyDown();
    system("pause");
    system("cls");
  }
  system("pause");
  return 0;
}

相关文章
|
8月前
|
存储 缓存 C++
C++ 容器全面剖析:掌握 STL 的奥秘,从入门到高效编程
C++ 标准模板库(STL)提供了一组功能强大的容器类,用于存储和操作数据集合。不同的容器具有独特的特性和应用场景,因此选择合适的容器对于程序的性能和代码的可读性至关重要。对于刚接触 C++ 的开发者来说,了解这些容器的基础知识以及它们的特点是迈向高效编程的重要一步。本文将详细介绍 C++ 常用的容器,包括序列容器(`std::vector`、`std::array`、`std::list`、`std::deque`)、关联容器(`std::set`、`std::map`)和无序容器(`std::unordered_set`、`std::unordered_map`),全面解析它们的特点、用法
C++ 容器全面剖析:掌握 STL 的奥秘,从入门到高效编程
|
10月前
|
编译器 C语言 C++
【c++丨STL】list模拟实现(附源码)
本文介绍了如何模拟实现C++中的`list`容器。`list`底层采用双向带头循环链表结构,相较于`vector`和`string`更为复杂。文章首先回顾了`list`的基本结构和常用接口,然后详细讲解了节点、迭代器及容器的实现过程。 最终,通过这些步骤,我们成功模拟实现了`list`容器的功能。文章最后提供了完整的代码实现,并简要总结了实现过程中的关键点。 如果你对双向链表或`list`的底层实现感兴趣,建议先掌握相关基础知识后再阅读本文,以便更好地理解内容。
211 1
|
10月前
|
算法 C语言 C++
【c++丨STL】list的使用
本文介绍了STL容器`list`的使用方法及其主要功能。`list`是一种双向链表结构,适用于频繁的插入和删除操作。文章详细讲解了`list`的构造函数、析构函数、赋值重载、迭代器、容量接口、元素访问接口、增删查改操作以及一些特有的操作接口如`splice`、`remove_if`、`unique`、`merge`、`sort`和`reverse`。通过示例代码,读者可以更好地理解如何使用这些接口。最后,作者总结了`list`的特点和适用场景,并预告了后续关于`list`模拟实现的文章。
332 7
|
存储 搜索推荐 C++
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器2
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器
194 2
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器2
|
存储 C++ 容器
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器1
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器
195 5
|
存储 编译器 C++
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
199 2
|
安全 Java
java线程之List集合并发安全问题及解决方案
java线程之List集合并发安全问题及解决方案
1303 1
|
Java API Apache
怎么在在 Java 中对List进行分区
本文介绍了如何将列表拆分为给定大小的子列表。尽管标准Java集合API未直接支持此功能,但Guava和Apache Commons Collections提供了相关API。
344 1
|
运维 关系型数据库 Java
PolarDB产品使用问题之使用List或Range分区表时,Java代码是否需要进行改动
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
存储 安全 Java
详解Java中集合的List接口实现的ArrayList方法 | Set接口实现的HashSet方法
详解Java中集合的List接口实现的ArrayList方法 | Set接口实现的HashSet方法
252 3

热门文章

最新文章

下一篇
oss教程