C++ std::list 完全指南:从入门到精通所有接口

C++ std::list 完全指南:从入门到精通所有接口

一、list的接口

在这里插入图片描述


在这里插入图片描述

list是一个带头的双向循环链表,支持在任意位置的插入和删除操作

1. 构造函数

//无参的构造list();//n个val去构造explicitlist(size_type n,const value_type& val =value_type(),const allocator_type& alloc =allocator_type());//用一段迭代器区间去构造template<classInputIterator>list(InputIterator first, InputIterator last,const allocator_type& alloc =allocator_type());//拷贝构造list(const list& x);//初始化列表去构造list(initializer_list<value_type> il,const allocator_type& alloc =allocator_type());
在这里插入图片描述

2. 赋值重载

//用另一个list对象赋值给一个list对象 list&operator=(const list& x);//用初始化列表赋值给list对象 list&operator=(initializer_list<value_type> il);
在这里插入图片描述

3. 迭代器

iterator begin()noexcept; const_iterator begin()constnoexcept; iterator end()noexcept; const_iterator end()constnoexcept;//反向迭代器 reverse_iterator rbegin()noexcept; const_reverse_iterator rbegin()constnoexcept; reverse_iterator rend() nothrow; const_reverse_iterator rend()const nothrow;
在这里插入图片描述
在这里插入图片描述

4. 容量

//判空boolempty()constnoexcept;//容器元素的个数 size_type size()constnoexcept;
在这里插入图片描述

5. 访问元素

//返回容器中第一个元素的引用 reference front(); const_reference front()const;//返回容器中最后一个元素的引用 reference back(); const_reference back()const;
在这里插入图片描述

6. 修改

//用一段迭代器赋值template<classInputIterator>voidassign(InputIterator first, InputIterator last);//用n个val赋值voidassign(size_type n,const value_type& val);//用初始化列表赋值voidassign(initializer_list<value_type> il);//头插voidpush_front(const value_type& val);//头删voidpop_front();//尾插voidpush_back(const value_type& val);//尾删voidpop_back();//在pos位置插入单个元素 iterator insert(const_iterator position,const value_type& val);//在pos位置插入n个val iterator insert(const_iterator position, size_type n,const value_type& val);//在pos位置插入一段迭代器区间template<classInputIterator> iterator insert(const_iterator position, InputIterator first, InputIterator last);//在pos位置插入一个初始化列表 iterator insert(const_iterator position, initializer_list<value_type> il);//删除pos位置的元素 iterator erase(const_iterator position);//删除一段迭代器区间 iterator erase(const_iterator first, const_iterator last);//交换两个list对象的内容voidswap(list& x);// n < size,保留前n个元素//n > size,插入元素到n个,如果val是具体的,就用val的拷贝去初始化,否则,将被值初始化voidresize(size_type n);voidresize(size_type n,const value_type& val);//清空list中所有的元素voidclear()noexcept
在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

7. 操作

//在pos位置插入一个list对象voidsplice(const_iterator position, list& x);//只转移x对象中i位置的元素到另一个list对象中voidsplice(const_iterator position, list& x, const_iterator i);voidsplice(const_iterator position, list&& x, const_iterator i);//转移x中的一段迭代器区间到另一个list对象中voidsplice(const_iterator position, list& x,const_iterator first, const_iterator last);voidsplice(const_iterator position, list&& x,const_iterator first, const_iterator last);//删除容器中所有和val值相等的元素voidremove(const value_type& val);//去重,原理双指针(只能去除相邻的重复的元素,常与sort搭配使用)voidunique();//合并链表,原理归并排序(要求两个list对象都是有序的)voidmerge(list& x);//comp仿函数对象,控制比较大小的逻辑template<classCompare>voidmerge(list& x, Compare comp);//链表排序voidsort();template<classCompare>voidsort(Compare comp);//逆置链表voidreverse()noexcept;
在这里插入图片描述


在这里插入图片描述

8. 非成员函数

//友元函数(1)template<classT,classAlloc>booloperator==(const list<T,Alloc>& lhs,const list<T,Alloc>& rhs);(2)template<classT,classAlloc>booloperator!=(const list<T,Alloc>& lhs,const list<T,Alloc>& rhs);(3)template<classT,classAlloc>booloperator<(const list<T,Alloc>& lhs,const list<T,Alloc>& rhs);(4)template<classT,classAlloc>booloperator<=(const list<T,Alloc>& lhs,const list<T,Alloc>& rhs);(5)template<classT,classAlloc>booloperator>(const list<T,Alloc>& lhs,const list<T,Alloc>& rhs);(6)template<classT,classAlloc>booloperator>=(const list<T,Alloc>& lhs,const list<T,Alloc>& rhs);//交换两个list对象的内容template<classT,classAlloc>voidswap(list<T,Alloc>& x, list<T,Alloc>& y);

list的接口到这里就结束了。

Read more

人工智能:自然语言处理在金融领域的应用与实战

人工智能:自然语言处理在金融领域的应用与实战

自然语言处理在金融领域的应用与实战 学习目标 💡 理解自然语言处理(NLP)在金融领域的应用场景和重要性 💡 掌握金融领域NLP应用的核心技术(如文本分类、情感分析、风险评估) 💡 学会使用前沿模型(如BERT、GPT-3、Transformer)进行金融文本分析 💡 理解金融领域的特殊挑战(如数据敏感性、实时性要求高、语言专业性强) 💡 通过实战项目,开发一个金融新闻情感分析应用 重点内容 * 金融领域NLP应用的场景 * 核心技术(文本分类、情感分析、风险评估) * 前沿模型(BERT、GPT-3、Transformer)在金融领域的使用 * 金融领域的特殊挑战 * 实战项目:金融新闻情感分析应用开发 一、金融领域NLP应用场景 1.1 金融文本分析概述 金融领域是NLP技术应用的重要领域之一。金融文本数据包括新闻报道、公司公告、分析师报告、社交媒体评论等,这些数据蕴含着丰富的信息,可以帮助金融机构和投资者了解市场动态、评估风险、做出决策。 1.1.

By Ne0inhk

Java List 根据List中对象的属性值是否相同作为同一组,分割成多个连续的子List

需求:Java List 根据List中对象的属性值是否相同作为同一组,分割成多个连续的子List package com.suncd.trs.provider.controller; import java.util.ArrayList; import java.util.List; import java.util.function.Function; public class ListGrouping { /** * 将List按照对象属性值是否相同进行分组,分割成多个连续的子List * @param list 原始List * @param keyExtractor 提取对象属性值的函数 * @param <T> List中对象的类型 * @param <K> 属性值的类型 * @return 分割后的子List集合 */ public static <

By Ne0inhk

A2UI 技术原理深度解析:AI Agent 如何安全生成富交互 UI

本文深入解析 Google 开源的 A2UI 协议,探讨其核心架构、数据流设计以及为何它是 LLM 生成 UI 的最佳实践。 一、A2UI 是什么? A2UI (Agent-to-User Interface) 是 Google 于 2025 年开源的声明式 UI 协议。它解决了一个核心问题: 如何让 AI Agent 安全地跨信任边界发送富交互 UI? 传统的 Agent 交互往往是纯文本对话,效率低下。而直接让 LLM 生成 HTML/JS 代码又存在严重的安全风险。A2UI 提供了一个中间方案:Agent 发送声明式 JSON 描述 UI 意图,客户端使用自己的原生组件渲染。 安全性:

By Ne0inhk
深入解析list:一个完整的C++双向链表实现

深入解析list:一个完整的C++双向链表实现

概述         这是一个完整的模板类 yyq::list 的实现,模仿 C++ 标准库中的 std::list。作为STL中最经典的双向链表容器,list的实现展示了C++模板编程、迭代器设计、链表操作和内存管理的核心技术。本文将完整分析所有代码,包括被注释的部分,不遗漏任何细节。 目录 概述 一、整体架构与设计 1.1 命名空间与头文件保护 1.2 链表节点设计 二、迭代器设计(核心部分) 2.1 第一阶段:两个独立的迭代器类(被注释的初始设计) 2.1.1 普通迭代器 list_iterator 2.1.2 const迭代器 list_const_iterator 2.

By Ne0inhk