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;
}

相关文章
|
1天前
|
存储 安全 Java
Java容器类List、ArrayList、Vector及map、HashTable、HashMap
Java容器类List、ArrayList、Vector及map、HashTable、HashMap
|
2天前
|
调度 C++ 容器
【C++】手搓 list 容器
本文我们实现了STL库中重要的list 的模拟实现,其中最重要莫过于迭代器的封装类的书写,这是前所未有的操作(对于我来说,我是第一次使用这种结构)。通过list 的模拟实现也帮我们巩固了类与对象的知识,也强化了指针操作的思路。欢迎大家讨论分析。
12 1
|
5天前
|
存储 设计模式 算法
【C++/STL】stack和queue(容器适配器、优先队列、双端队列)
【C++/STL】stack和queue(容器适配器、优先队列、双端队列)
11 1
|
5天前
|
存储 编译器 C++
【C++/STL】list(常见接口、模拟实现、反向迭代器、)
【C++/STL】list(常见接口、模拟实现、反向迭代器、)
5 0
|
11天前
|
存储 算法 C++
详解C++中的STL(标准模板库)容器
【4月更文挑战第30天】C++ STL容器包括序列容器(如`vector`、`list`、`deque`、`forward_list`、`array`和`string`)、关联容器(如`set`、`multiset`、`map`和`multimap`)和容器适配器(如`stack`、`queue`和`priority_queue`)。它们为动态数组、链表、栈、队列、集合和映射等数据结构提供了高效实现。选择合适的容器类型可优化性能,满足不同编程需求。
|
13天前
|
C++ 容器
STL—map容器
STL—map容器
|
17天前
|
存储 算法 程序员
C++从入门到精通:2.2.1标准库与STL容器算法深度解析
C++从入门到精通:2.2.1标准库与STL容器算法深度解析
|
18天前
|
存储 缓存 编译器
【C++进阶(五)】STL大法--list模拟实现以及list和vector的对比
【C++进阶(五)】STL大法--list模拟实现以及list和vector的对比
|
18天前
|
算法 C++ 容器
【C++进阶(四)】STL大法--list深度剖析&list迭代器问题探讨
【C++进阶(四)】STL大法--list深度剖析&list迭代器问题探讨
|
1天前
|
存储 安全 算法
Java一分钟之-Java集合框架入门:List接口与ArrayList
【5月更文挑战第10天】本文介绍了Java集合框架中的`List`接口和`ArrayList`实现类。`List`是有序集合,支持元素重复并能按索引访问。核心方法包括添加、删除、获取和设置元素。`ArrayList`基于动态数组,提供高效随机访问和自动扩容,但非线程安全。文章讨论了三个常见问题:索引越界、遍历时修改集合和并发修改,并给出避免策略。通过示例代码展示了基本操作和安全遍历删除。理解并正确使用`List`和`ArrayList`能提升程序效率和稳定性。
6 0

热门文章

最新文章