(C++)STL-list

目录

一、什么是list

优势:

二、访问遍历

三、插入

四、删除

[五、实战-L1-011 A-B](#五、实战-L1-011 A-B)


一、什么是list

list是STL容器中的容器,且元素在容器中的位置是分散的并与大小无关(不会自动排序)。list的底层是双向链表。

优势:

多用于需要大量数据的插入和删除,且对数据的随机访问比较少。

劣势:
无法通过"下标[ ]"直接访问元素,需要通过从头(尾)遍历元素找到元素。

二、访问遍历

cpp 复制代码
	for(list<char>::const_iterator it=lta.begin();it!=lta.end();++it)
	cout<<*it;
	cout<<endl; 

三、插入

push_back(elem); //在容器尾部加入一个元素(elem)

.push_front(elem); //在容器开头插入一个元素(elem)

.insert(pos,elem); //在pos位置插elem元素的拷贝,返回新数据的位置
.insert(pos,n,elem); //在pos位置插入n个elem数据,无返回值.
.insert(pos,beg,end); //在pos位置插入[beg,end)区间的数据,无返回值.

四、删除

.pop_back0; //删除容器中最后一个元素

.pop_front(); //从容器开头移除第一个元素

.clear(); //移除容器的所有数据
.erase(beg,end); //删除[beg,end)区间的数据,返回下一个数据的位置
.erase(pos); //删除pos位置的数据,返回下一个数据的位置
.remove(elem); //删除容器中所有与elem值匹配的元素

五、实战-L1-011 A-B

本题要求你计算A−B。不过麻烦的是,A和B都是字符串 ------ 即从字符串A中把字符串B所包含的字符全删掉,剩下的字符组成的就是字符串A−B。

输入格式:

输入在2行中先后给出字符串A和B。两字符串的长度都不超过104,并且保证每个字符串都是由可见的ASCII码和空白字符组成,最后以换行符结束。

输出格式:

在一行中打印出A−B的结果字符串。

输入样例:

复制代码
I love GPLT!  It's a fun game!
aeiou

输出样例:

复制代码
I lv GPLT!  It's  fn gm!

不是正确的解法,如果用list来解决会超时。

cpp 复制代码
#include <iostream>
#include <list>
using namespace std;

int main() {
    list<char> lta;
    char h;

    // 修正第一个循环:读取到换行符停止,且不存入换行符
    while (cin.get(h) && h != '\n') {
        lta.push_back(h);
    }

    // 修正第二个循环:安全读取输入,避免死循环
    char k;
    while (cin.get(k) && k != '\n') {
        lta.remove(k);
    }

    // 输出剩余字符
    for (list<char>::const_iterator it = lta.begin(); it != lta.end(); ++it) {
        cout << *it;
    }
    cout << endl;
    return 0;
}

正确的解法:

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
	string a;
	string b;
	getline(cin,a);
	getline(cin,b);
	int k;
	for(int i=0;i<b.length();i++)
	{
		k=a.find(b[i]);//寻找a中b的所含元素 
		if(k!=-1)
		{
			a.erase(k,1);//删除1个 
			i--;//因为要删除全部的,所以要返回重新找有没有也相同的 
		}
	}
	cout<<a;
	return 0;	
} 
相关推荐
从此不归路4 分钟前
Qt5 进阶【9】模型-视图框架实战:从 TableView 到自定义模型的一整套落地方案
开发语言·c++·qt
人道领域15 分钟前
javaWeb从入门到进阶(SpringBoot基础案例2)
java·开发语言·mybatis
Stack Overflow?Tan9016 分钟前
c++constexpr
开发语言·c++
雨季66626 分钟前
Flutter 三端应用实战:OpenHarmony 简易数字累加器开发指南
开发语言·flutter·ui·ecmascript
晚风吹长发26 分钟前
初步了解Linux中的信号捕捉
linux·运维·服务器·c++·算法·进程·x信号
码农水水28 分钟前
米哈游Java面试被问:Shenandoah GC的Brooks Pointer实现机制
java·开发语言·jvm·spring boot·redis·安全·面试
小程同学>o<30 分钟前
嵌入式之C/C++(二)内存
c语言·开发语言·c++·笔记·嵌入式软件·面试题库
程序员清洒33 分钟前
Flutter for OpenHarmony:Dialog 与 BottomSheet — 弹出式交互
开发语言·flutter·华为·交互·鸿蒙
cyforkk34 分钟前
07、Java 基础硬核复习:面向对象编程(进阶)的核心逻辑与面试考点
java·开发语言·面试
钱多多先森43 分钟前
【Dify】使用 python 调用 Dify 的 API 服务,查看“知识检索”返回内容,用于前端溯源展示
开发语言·前端·python·dify