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

如何实现std::list在指定位置的局部反转?

实现std::list指定位置局部反转的方法

1 定位待反转区间的起始迭代器

std::list的迭代器属于双向迭代器,不支持随机访问的偏移运算符+,可以使用标准库提供的std::advance函数完成迭代器偏移,该函数定义在<iterator>头文件中。

以你的需求为例,要从第三个元素开始反转,只需要将首迭代器偏移2个位置即可:

// 定义待操作的list
std::list<int> grades = {1,2,3,4,5,6};
// 初始化起始迭代器指向第一个元素
auto start = grades.begin();
// 迭代器向后偏移2个位置,指向第三个元素
std::advance(start, 2);

2 调用std::reverse完成局部反转

std::reverse支持传入任意双向迭代器区间完成反转,你只需要将刚才得到的起始迭代器和区间结束迭代器传入即可。你的需求是反转从第三个元素到列表末尾的所有元素,结束迭代器直接传grades.end()即可:

std::reverse(start, grades.end());

操作完成后grades的内容就会变成你期望的{1,2,6,5,4,3}。

扩展:反转任意中间区间

如果你需要反转的是列表的中间某一段,比如从第三个元素到第五个元素,只需要再定位到区间结束的迭代器即可:

auto start = grades.begin();
std::advance(start, 2); // 指向第三个元素,区间左闭
auto end = grades.begin();
std::advance(end, 5); // 指向第六个元素,区间右开,刚好覆盖第3-5个元素
std::reverse(start, end);

完整可运行示例代码

#include <iostream>
#include <list>
#include <algorithm>
#include <iterator>

int main() {
    std::list<int> grades = {1,2,3,4,5,6};
    auto start = grades.begin();
    std::advance(start, 2);
    std::reverse(start, grades.end());
    // 输出验证结果
    for (int num : grades) {
        std::cout << num << " ";
    }
    // 输出结果:1 2 6 5 4 3
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 13:24:09