C++ STL/BOOST混搭遇到 filesystem fs::directory_iterator的一个滑稽的错误

文章讨论了在C++中使用boost::filesystem的目录迭代器时,std::distance可能导致迭代器意外改变的问题,指出应避免混用STL和Boost的迭代器,提倡使用C++17的filesystem替代或谨慎处理boost迭代器的行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

错误来源于,用

fs::directory_iterator iter(folderPath), end;

然后for循环

for (; iter != iter_end; ++iter) {}

最开始没问题,后来说加个进度条,统计一下所有文件数量,用了std::distance先得出总的文件数量,然后for循环能给出一个进度。

int totalFiles = std::distance(iter, iter_end);

std::cout << " totalFiles is " << totalFiles << std::endl;
for (; iter != iter_end; ++iter) {}

奇怪的事情发生了

明明统计得到几百个文件,可是for循环一次都不进。

写了个测试代码:

#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
#include <boost/filesystem.hpp>

namespace fs = boost::filesystem;
int main() {
    std::vector<int> numbers = {1, 2, 3, 4, 5};

    // 创建迭代器
    auto beginIter = numbers.begin();
    auto endIter = numbers.end();

    // 计算距离
    std::cout &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值