C++ forward_list实战指南(从入门到精通的7个关键步骤)

第一章:C++ forward_list概述与核心特性

单向链表的数据结构设计

std::forward_list 是 C++11 引入的单向链表容器,定义在 <forward_list> 头文件中。与 std::list 不同,它仅支持单向遍历,每个节点只包含指向下一节点的指针。这种设计显著减少了内存开销,适用于对内存敏感且主要进行插入删除操作的场景。

核心特性与优势

  • 内存占用小:相比双向链表,每个节点少一个指针存储空间
  • 高效的插入与删除:在已知位置插入或删除元素的时间复杂度为 O(1)
  • 不支持反向迭代:只能通过 begin() 和 end() 进行前向遍历
  • 无 size() 成员函数:需调用 std::distance 计算元素个数,时间复杂度为 O(n)

基本使用示例

#include <forward_list>
#include <iostream>

int main() {
    std::forward_list<int> flist = {1, 2, 3};
    flist.push_front(0);  // 在头部插入元素
    flist.emplace_after(flist.begin(), 10);  // 在第一个元素后插入10

    // 遍历输出
    for (const auto& val : flist) {
        std::cout << val << " ";  // 输出: 0 1 10 2 3
    }
    std::cout << std::endl;

    return 0;
}

上述代码展示了 forward_list 的初始化、前端插入和指定位置后插入操作。注意 emplace_after 需要传入有效迭代器,不能在链表末尾直接使用。

与其他序列容器的对比

容器遍历方向内存开销随机访问size() 支持
vector双向低是是
list双向高否是
forward_list单向最低否否

第二章:forward_list基础操作详解

2.1 构造与初始化:掌握5种常见创建方式

在Go语言中,结构体的构造与初始化有多种方式,灵活选择可提升代码可读性与性能。
1. 字面量初始化
最直接的方式是使用结构体字面量:
type User struct {
    ID   int
    Name string
}
u := User{ID: 1, Name: "Alice"}
该方式适用于已知字段值的场景,编译器会进行类型检查和字段顺序优化。
2. new关键字
new(T) 返回指向零值的指针:
u := new(User) // &User{}
所有字段初始化为零值,适合需要指针语义的场景。
3. 工厂函数
封装复杂初始化逻辑:
func NewUser(id int, name string) *User {
    return &User{ID: id, Name: name}
}
支持默认值、参数校验,是构建可维护API的关键模式。

2.2 元素插入与删除:理解单向链表的独特机制

在单向链表中,元素的插入与删除操作不依赖于物理位置的移动,而是通过调整节点间的指针引用实现,这显著提升了动态数据操作的效率。
插入操作的核心逻辑
以在指定节点后插入新节点为例,需先将新节点的指针指向原后续节点,再更新前驱节点的指针。该过程时间复杂度为 O(1),前提是已定位插入位置。
type ListNode struct {
    Val  int
    Next *ListNode
}

func (node *ListNode) InsertAfter(val int) {
    newNode := &ListNode{Val: val, Next: node.Next}
    node.Next = newNode // 更新指针
}
上述代码中,InsertAfter 方法将新节点无缝接入链表结构,避免了数组式的大规模数据迁移。
删除操作的指针重定向
删除节点时,只需将其前驱节点的 Next 指针跳过目标节点,直接指向其后继。注意需确保目标节点非尾节点且存在前驱。
  • 头节点删除需特殊处理,通常由链表结构维护头指针
  • 中间节点删除依赖前驱访问,无法直接定位时需遍历查找

2.3 遍历与访问:迭代器的正确使用方法

在现代编程中,迭代器是遍历集合的核心工具。它提供了一种统一的接口来访问元素,而无需暴露底层数据结构。
迭代器的基本用法
以 Go 语言为例,通过 `range` 关键字可安全遍历切片或映射:
data := []string{"a", "b", "c"}
for index, value := range data {
    fmt.Println(index, value)
}
上述代码中,range 返回索引和值的副本,避免直接操作原始数据。若仅需值,可将索引置为下划线 _。
避免常见陷阱
  • 不要在遍历时修改集合长度,否则可能引发并发修改异常或未定义行为;
  • 注意指针语义:若集合存储指针,value 仍为副本,但指向同一对象。

2.4 大小与状态查询:empty、max_size等实用接口

在STL容器中,大小与状态查询接口为开发者提供了对容器运行时特性的快速洞察。常用方法包括 `empty()`、`size()` 和 `max_size()`。
核心查询接口详解
  • empty():判断容器是否为空,时间复杂度通常为 O(1);
  • size():返回当前元素数量;
  • max_size():返回容器理论上可容纳的最大元素数。
#include <vector>
#include <iostream>

int main() {
    std::vector<int> vec;
    std::cout << "Empty: " << vec.empty() << "\n";     // 输出 1(true)
    std::cout << "Size: " << vec.size() << "\n";       // 输出 0
    std::cout << "Max size: " << vec.max_size() << "\n"; // 极大值,依赖系统
}
上述代码展示了如何使用这些接口获取容器状态。`empty()` 比 `size() == 0` 更推荐,因其在所有标准容器中都具有恒定性能保证。`max_size()` 受限于可用内存和类型大小,实际可用容量可能更小。

2.5 赋值与交换:安全高效的数据管理技巧

在编程中,赋值与变量交换是基础但关键的操作。不当的实现可能导致数据污染或性能损耗。
原子赋值的最佳实践
使用结构化赋值可提升代码可读性与安全性:
a, b := 10, 20
a, b = b, a  // 无需临时变量完成交换
该语法利用元组解包机制,在单条指令中完成并行赋值,避免中间状态残留。
并发环境下的安全交换
在多线程场景中,应采用原子操作保障数据一致性:
  • 使用 sync/atomic 包提供的 CompareAndSwap
  • 避免竞态条件导致的值覆盖
  • 确保读写操作的不可分割性
方法性能安全性
临时变量交换中等低
异或交换(整型)高中
原子操作较低高

第三章:进阶功能实战应用

2.1 排序与合并:利用sort()和merge()提升性能

在数据处理过程中,排序与合并是常见的核心操作。Python 的 `sorted()` 函数和列表的 `sort()` 方法采用 Timsort 算法,在部分有序数据上表现优异。
高效排序实践
# 对复杂对象按指定键排序
data = [{'name': 'Alice', 'age': 30}, {'name': 'Bob', 'age': 25}]
data.sort(key=lambda x: x['age'])
上述代码通过 key 参数指定排序依据,原地排序减少内存开销,时间复杂度为 O(n log n)。
多源数据合并
当处理已排序的数据流时,使用 heapq.merge() 可高效合并多个有序序列:
  • 无需将所有数据加载到内存
  • 支持惰性迭代,节省资源
  • 适用于日志归并、数据库联合查询等场景

2.2 去重与反转:unique()与reverse()的实际场景

在数据处理中,去重和反转是常见的操作。`unique()`用于消除重复元素,确保集合的唯一性,常用于日志清洗或用户行为分析。
去重的应用示例
func unique(ints []int) []int {
    seen := make(map[int]bool)
    result := []int{}
    for _, v := range ints {
        if !seen[v] {
            seen[v] = true
            result = append(result, v)
        }
    }
    return result
}
该函数通过哈希表记录已出现的值,时间复杂度为O(n),适用于大规模数据去重。
反转的实际用途
`reverse()`常用于调整数据顺序,如翻转时间序列或栈结构输出。
func reverse(strs []string) {
    for i, j := 0, len(strs)-1; i < j; i, j = i+1, j-1 {
        strs[i], strs[j] = strs[j], strs[i]
    }
}
通过双指针交换,原地完成反转,空间效率高,适合性能敏感场景。

2.3 条件移除:remove()与remove_if()的精准控制

在STL容器操作中,`remove()`和`remove_if()`并非直接删除元素,而是通过移动满足条件的元素到容器末尾,配合`erase()`实现高效清理,即“erase-remove”惯用法。
基本用法对比
  • remove(begin, end, value):移除指定值的所有元素
  • remove_if(begin, end, predicate):根据谓词函数移除符合条件的元素

std::vector nums = {1, 2, 3, 4, 5, 6};
// 移除所有偶数
nums.erase(std::remove_if(nums.begin(), nums.end(),
    [](int n) { return n % 2 == 0; }), nums.end());
上述代码中,`remove_if`将奇数前移,返回新逻辑尾部迭代器,`erase`从此位置删除冗余元素。该机制避免频繁内存操作,显著提升性能,适用于vector、deque等连续存储容器。

第四章:性能优化与内存管理策略

4.1 操作复杂度分析:时间与空间效率全解析

在算法设计中,操作复杂度是衡量性能的核心指标。时间复杂度反映执行时间随输入规模的增长趋势,而空间复杂度则描述内存占用情况。
常见复杂度对比
  • O(1):常数时间,如数组随机访问
  • O(log n):对数时间,典型为二分查找
  • O(n):线性时间,如遍历链表
  • O(n²):平方时间,常见于嵌套循环
代码示例:线性查找 vs 二分查找
// 线性查找:时间复杂度 O(n),空间复杂度 O(1)
func linearSearch(arr []int, target int) int {
    for i := 0; i < len(arr); i++ { // 遍历每个元素
        if arr[i] == target {
            return i
        }
    }
    return -1
}

// 二分查找:时间复杂度 O(log n),空间复杂度 O(1)
func binarySearch(arr []int, target int) int {
    left, right := 0, len(arr)-1
    for left <= right {
        mid := left + (right-left)/2 // 防止整数溢出
        if arr[mid] == target {
            return mid
        } else if arr[mid] < target {
            left = mid + 1
        } else {
            right = mid - 1
        }
    }
    return -1
}
上述代码中,linearSearch需检查所有元素,最坏情况下耗时较长;而binarySearch每次将搜索范围减半,显著提升效率,但要求输入有序。

4.2 内存分配器定制:提升高频操作响应速度

在高频数据处理场景中,标准内存分配机制可能引入不可控的延迟。通过定制内存分配器,可显著减少动态分配开销,提升系统响应速度。
对象池与预分配策略
采用对象池技术复用内存块,避免频繁调用 malloc/free。以下为基于 Go 的轻量级内存池实现:

type MemoryPool struct {
    pool *sync.Pool
}

func NewMemoryPool() *MemoryPool {
    return &MemoryPool{
        pool: &sync.Pool{
            New: func() interface{} {
                buf := make([]byte, 1024)
                return &buf
            },
        },
    }
}

func (mp *MemoryPool) Get() *[]byte {
    return mp.pool.Get().(*[]byte)
}

func (mp *MemoryPool) Put(buf *[]byte) {
    mp.pool.Put(buf)
}
上述代码通过 sync.Pool 实现 Goroutine 安全的对象缓存。New 函数定义初始分配大小,Get/Put 方法完成对象获取与归还,有效降低 GC 压力。
性能对比
分配方式平均延迟(μs)GC暂停次数
标准分配12015
定制内存池353

4.3 splice_after的巧妙运用:实现零拷贝元素转移

在高效链表操作中,splice_after 提供了一种无需复制节点即可转移元素的强大机制。该方法通过调整指针链接,将一个列表的子段“剪切”并插入到另一位置,实现真正的零拷贝迁移。
核心操作逻辑
list1.splice_after(list1.cbefore_begin(), list2, list2.cbegin());
上述代码将 list2 的首元素移动至 list1 头节点之后。参数依次为:插入点前的节点、源列表、待移动元素的前驱。
性能优势对比
操作方式时间复杂度内存开销
拷贝插入O(n)高
splice_afterO(1)无额外分配
此特性特别适用于大规模数据重组场景,如任务队列合并或缓存分片迁移。

4.4 避免常见性能陷阱:减少无效遍历与重复计算

在高频数据处理场景中,无效遍历和重复计算是影响系统吞吐量的关键瓶颈。通过优化算法结构,可显著降低时间复杂度。
缓存中间结果避免重复计算
对于幂等性操作,使用记忆化技术缓存函数输出:
var cache = make(map[int]int)

func fibonacci(n int) int {
    if val, ok := cache[n]; ok {
        return val
    }
    if n <= 1 {
        return n
    }
    cache[n] = fibonacci(n-1) + fibonacci(n-2)
    return cache[n]
}
上述代码将递归斐波那契的时间复杂度从 O(2^n) 降至 O(n),通过 map 缓存已计算值,避免重复子问题求解。
提前终止无效遍历
使用标志位或条件判断缩短循环路径:
  • 在查找命中后立即 break
  • 利用索引跳过已知无效区间
  • 优先过滤高筛选率字段

第五章:forward_list在现代C++中的定位与替代方案比较

单向链表的典型应用场景

std::forward_list 是 C++11 引入的单向链表容器,适用于频繁插入/删除且内存敏感的场景。由于其节点仅存储后继指针,相比 std::list 节省了约 50% 的指针开销。

// forward_list 插入操作示例
#include <forward_list>
#include <iostream>

std::forward_list<int> flist = {1, 3, 4};
auto it = flist.before_begin();
flist.insert_after(it, 2); // 在位置后插入
for (const auto& val : flist) {
    std::cout << val << " "; // 输出: 1 2 3 4
}
与vector和list的性能对比
操作forward_listvectorlist
插入(中间)O(1)O(n)O(1)
内存开销低最低高
缓存局部性差优差
现代替代方案的实际选择
  • 若需随机访问或迭代器稳定性,优先选用 std::deque 或 std::vector;
  • 当必须双向遍历时,std::list 更合适;
  • 对于小数据集且插入频繁的场景,forward_list 仍具优势;
  • 使用 absl::IntrusiveList(来自 Abseil 库)可进一步优化性能关键路径。
流程示意: [新元素] → [节点分配] → [指针重定向] → [插入完成] ↑ └─ 单向链接,无前驱查找
C++, STL容器 forward_list:单向链表深度解析 orward_list作为C++标准库中的轻量级容器,在特定场景下展现出无可替代的性能优势。通过深入理解其实现机制并合理运用现代C++特性,开发者能够在内存敏感型应用中构建高效可靠的数据结构。 阅读详情

相关推荐

C++ STL forward_list 完全指南

C++ STL中的forward_list是C++11引入的单向链表容器,相比双向链表list具有更小的内存开销。它只支持前向迭代,提供insert_after、erase_after等特殊操作函数。forward_list适用于需要频繁中间插入/删除但不需要随机访问的场景,如哈希表冲突链实现。主要特点包括:每个节点仅含数据和next指针;插入删除时间复杂度O(1);不支持反向遍历;内存占用比list更小。该容器特别适合对内存敏感且只需单向链接的数据结构实现。

woaibcheng的博客 791

C++容器forward_list

C++容器forward_list的使用

ceclar123的专栏 920

自动驾驶仿真(五)—— 基于Carsim、Prescan、Simulink的联合仿真

自动驾驶仿真五——基于Carsim、Prescan、Simulink的联合仿真1. 联合仿真流程2. CarSim联合仿真配置要点3. Prescan联合仿真配置要点4. Carsim、Prescan、Simulink联合仿真结果5. 参考学习的书目教材 博主前面的博文已经介绍了Carsim和Prescan各自与Matlab/Simulink的相关联合仿真应用实例,并且论述过几款软件各自的优势及用法,CarSim适合动力学模型的建立,PreScan适合行车场景的搭建,Simulink适合控制算法的设计及信号

zhudj08的博客 1万+

C++中容易忘的知识点——list和forward_list(四)

list容器 list的特点 list的初始化和成员函数 forward_list容器 forward_list的特点 forward_list的初始化和成员函数

Livalueur 1万+

Jetson nano/nx使用麒麟arm版向日葵实现远程控制

Jetson nano/nx使用麒麟arm版向日葵实现远程控制1、安装向日葵软件2、运行Sunlogin Client3、向日葵闪退问题4、重启系统5、重启后黑屏问题 特别提醒: 本博客的第3步切换桌面管理环境到lightdm,存在重启后开机黑屏的风险,我在自己的nano/nx上都没有问题,但帮一个同学的nx配置时,切换到lightdm,重启开机却出现了黑屏,所以执行第3步的话要有心理准备,黑屏解决方法见第5步,特此提醒。

胡乱学点东西 2万+

ABAP FB05 清账实战:POSTING_INTERFACE_CLEARING 核心参数与业务场景解析

本文深入解析ABAP FB05清账操作中的核心函数POSTING_INTERFACE_CLEARING,详细讲解其关键参数与业务场景应用。通过实战案例展示收款清账(EINGZAHL)流程,提供常见错误排查方法,并分享批量清账优化与财务凭证集成的高级技巧,帮助开发者高效处理SAP财务模块清账需求。

weixin_33423874的博客 475

C++ STL容器 —— forward_list 用法详解

C++ STL容器—— forward_list 成员函数用法详解 写在前面:近期正在重新学习C++的STL容器,因此准备将STL函数的用法详细记录一下,主要介绍一些基本成员函数的用法, 外加实际的例子,并不涉及原理。其实了解这些函数最好的方法还是需要自己上手操作一下. 写的不好, 请大神手下留情. 下面说的 “运行之后” 表示: 运行上个语句之后的结果. 一行如果说的太长的话, 就得拖动下面...

Ember_Sky 1899

用Python+PyTorch实现DQN无人机避障:从环境搭建到实战训练(附完整代码)

本文详细介绍了如何使用Python和PyTorch框架,基于深度强化学习中的DQN算法,实现一个无人机自主避障系统。内容涵盖从自定义环境搭建、DQN智能体核心算法实现,到完整的训练流程与超参数调优,并提供了可视化演示与进阶优化方向,为开发者提供了从理论到实践的完整指南。

kubernetes8ctl的博客 640

C++——list的了解和使用

《C++——list的了解和使用》 求点赞收藏评论关注!!! 感谢各位大佬的支持!!!

2301_80401288的博客 3083

HC-SR04测距不准?STM32F103定时器捕获模式详解与精度提升实战

本文详细解析了HC-SR04超声波测距模块在STM32F103上的精度问题,并提供了定时器输入捕获模式的实战配置方法。通过硬件级时间测量和温度补偿算法,将测距精度提升至±0.1cm,适用于工业级应用场景。文章包含完整的代码实现和测试对比数据,帮助开发者解决超声波测距不准的常见问题。

weixin_30313409的博客 351

Kriging代理模型理论相关推导

代理模型,Kriging,加点准则

森屹的博客 1万+

用 C++ 创建单向链表 forward list

练习使用现代 C++ 的特性。

drin201312的博客 505

ArcGIS实验教程——实验十七:缓冲区分析(Buffer Analysis)

【实验描述】缓冲区(Buffer)是为了识别某一地理实体对周围地物的影响而在其周围建立的一定宽度多边形区域,缓冲区分析(Buffer Analysis)是用来确定不同地理要素的空间临近性或接近程度的一种分析方法。作为GIS的空间分析方法之一,缓冲区分析的应用范围特别广泛,常用于分析矢量实体对周围的影响。例如,工厂排放的废水废气所影响的空间范围等等。 一、缓冲区的基本概念 1、缓冲区 是地理空间目标的一种影响范围或服务范围。 2、缓冲区分析 指根据分析对象的点、线、面实体,自动建立它们周围一定距离的带

智慧空间实验室 1万+

C++总结(5):STL顺序容器之array、vector、deque、forward_list、list详解

容器是一个持有其他对象元素集合的容器对象,以类模板的形式实现,可以灵活地支持不同类型的元素。容器负责管理其元素的存储空间,并提供成员函数来直接或通过迭代器(类似于指针的引用对象)访问它们。C++中有多种种类的容器,包括:顺序容器()、关联容器()、无序容器()和容器适配器(这篇文章先来详细介绍一下顺序容器的用法。顺序容器实现了可以按顺序访问的数据结构,它包括array(静态连续数组)、vector(动态连续数组)、deque(双端队列)、(单向链表)和list(双向链表)。

主要分享嵌入式软件、人工智能部分知识 2181

Orange3实战教程:转换---预处理

部件提供了多种预处理方法,这些方法可以在单个预处理流程中组合使用。某些方法也可作为独立部件提供,支持更高级的技术和参数调整。连接到测试与评分:在交叉验证的每个批次中应用预处理器,随后学习器的预处理器会作用于预处理后的子集。连接到学习器:覆盖学习器的默认预处理流程,仅应用自定义流程(各学习器的默认步骤详见其文档)。直接连接到原始数据并输出预处理后的数据集,可能导致模型过拟合。:从原始数据中随机选择固定数量或百分比的特征,主要用于高级测试或教学用途。的预处理器输入,同时传入数据和学习器(如。

err2008的专栏 148

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

C++ STL forward_list使用

C++ STL forward_list使用

weixin_45867382的博客 1001

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【C++序列式容器】forward_list

C++序列式容器之forward_list

Qiuhan_909的博客 1109

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C++ STL标准库:序列容器 单向链表forward_list(C++ 11)

文章目录1. 简介2. 基本使用3. 迭代器使用4. 增加、删除、插入元素 forward_list - C++ Reference (cplusplus.com) 1. 简介 forward_list 是 C++ 11 新添加的一类容器,其底层实现和 list 容器一样,采用的也是链表结构,只不过 forward_list 使用的是单链表,而 list 使用的是双向链表(如下图) forward_list(单向链表)不支持随机访问,对任何位置进行高效插入、删除的序列容器。与list容器的区别是它是单向的

超级大洋葱的博客 4490

【STL】顺序容器之list、forward_list用法总结

        一、基本原理         list是双向链表,forward_list是单向链表,在链表的任何位置添加或删除元素都很快,但是作为代价,这两个容器都不支持随机访问,为了访问容器中的某一个元素,我们只能遍历整个容器。        forward_list是C++新标准增加的类型,其设计目标是达到与最好的手写单向链表数据结构相当的性能,因此forward_list没有siz

WYuan的博客 1836

42 C++ STL模板库11-容器4-forward_list

STL中的forward_list是一个单向链表容器,相比list更节省空间,支持快速插入和删除但不支持随机访问。本文介绍了forward_list的主要操作:1)多种构造函数(空构造、填充构造、迭代器范围构造等);2)元素访问函数front()及其安全使用注意事项;3)迭代器操作(包括特殊位置迭代器before_begin()和常规迭代器begin()/end()系列)。文章通过代码示例展示了各函数的典型用法场景,并对比了不同迭代器的特性。forward_list适合需要单向遍历且频繁插入删除的场景。

17208955的博客 1194

顺序容器 -forward list单链表

下表列出定义forward list对象的常用初始化方法.//输出l1的所有数据int main()//创建一个空的单链表//创建一个包含2个默认值的单链表//创建一个包含3个5的单链表//创建一个包含1,2,3,4的单链表//创建一个和l4元素相同的单链表//同l5,创建一个和l4元素相同的单链表//创建一个不包含l4第一个元素的单链表Show(l1);Show(l2);Show(l3);Show(l4);Show(l5);Show(l6);Show(l7);

2301_76411812的博客 1790

C++容器之前向链表(std::forward_list)

前向列表是序列容器,允许在序列中的任何位置进行恒定时间的插入和擦除操作。前向列表被实现为单链表;单链表可以将它们所包含的每个元素存储在不同且不相关的存储位置。通过与序列中下一个元素的链接的每个元素的关联来保持排序。forward_list容器和list容器之间的主要设计区别在于,前者在内部只保留一个到下一个元素的链接,而后者为每个元素保留两个链接:一个指向下一个元件,一个指向前一个元件。这允许在两个方向上进行高效迭代,但每个元件消耗额外的存储空间,插入和删除元件的时间开销略高。

flysnow010的博客 1197

C++ STL常用标准库容器入门(vector,map,set,string,list...)

其中几种种序列容器类型 C++ STL中最基本以及最常用的类或容器无非就是以下几个: string vector deque list forward_list queue priority_queue stack string 对比在C语言中一般怎么使用字符串的 char* s1 = "Hello JackYu!"; //创建指针指向字符串常量,既然是常量字符串,这段字符...

yuleidnf的博客 2万+

C++——list超详细介绍

list: list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。 list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。 list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。 与其他的序列式容器相比(a...

陌上人如玉,公子世无双。 1万+

C++11 容器(1) forward_list

一 简介 1. C++11开始,STL增加了 forward_list 容器。它的实现是 singly linked list(单链表), 支持 foward iterator (前向迭代器)。 2. 单聊表进行元素的插入和删除是比较快速的,改动指针的指向即可,但前提是知道待处理节点的前驱节点。 3. 由于性能原因,forward_List 并没有提供 size 函数,也不能直接处理最末元素...

程序员Link 853

C++ STL库复习(7)forward_list

forward_list 容器以单链表的形式存储元素。forward_list 的模板定义在头文件 forward_list 中。 fdrward_list 和 list 最主要的区别是: 它不能反向遍历元素; 只能从头到尾遍历。 forward_list 的单向链接性也意味着它会有一些其他的特性: 无法使用反向迭代器。只能从它得到const或non-const前向迭代器,这些迭代器都不能解...

qq_24649627的博客 484
上一篇: 编译期安全与性能双提升,constexpr构造函数最佳实践全解析
下一篇: 类成员初始化顺序搞错=内存泄漏?专家教你5步精准避坑
Instrustar
博客等级 码龄1年 182粉丝 2225原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值