You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不使用循环将std::vector或数组插入std::forward_list中

问题原因

原有代码运行不符合预期的核心问题:空forward_list的begin()方法返回的迭代器与end()迭代器相等,对end()迭代器执行insert_after属于未定义行为,无法完成插入操作。

无循环插入的实现方法

std::forward_list的insert_after本身支持范围插入重载,不需要手动写循环,直接传入待插入范围的首尾迭代器即可:

1. 插入到forward_list头部

这是最常见的场景,直接用before_begin()获取首元素之前的迭代器作为插入位置:

// 直接插入整个vector
listOne.insert_after(listOne.before_begin(), arr.begin(), arr.end());

如果是插入普通数组,也可以直接传入数组指针作为迭代器:

int arr[] = {2,4,3};
listOne.insert_after(listOne.before_begin(), std::begin(arr), std::end(arr));

2. 插入到指定位置之后

如果需要插入到forward_list中某个现有元素的后面,只需要拿到该元素的迭代器作为插入位置,同样调用范围插入重载即可:

// 示例:插入到listOne第一个元素之后
auto it = listOne.begin();
listOne.insert_after(it, arr.begin(), arr.end());

3. 初始化时直接导入

如果是新建forward_list时需要导入vector/数组的内容,可以直接在构造函数传入范围迭代器:

std::forward_list<int> listOne(arr.begin(), arr.end());

内容的提问来源于stack exchange,提问作者Dhruv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 17:39:04