注册 登录
编程论坛 C语言论坛

求助,for循环的语法。。。

追梦人zmrghy 发布于 2022-07-04 03:00, 1243 次点击
只有本站会员才能查看附件,请 登录

遍历目录,批量修改文件名,学习了几个月了。
终于可以用自己能够理解的方法写出程序来了。。。
程序代码:
#include <iostream>
#include<filesystem>
#include <regex>
using namespace std;

filesystem::path make_name(filesystem::path url,wstring str)
{
    wregex pattern(L".*[::](.+)[((]国.*");
    wstring result = regex_replace(str, pattern, L"$1.mp4");
    url += L'\\';
    url += result;
    return url;
}
void traverseDirectory(filesystem::path url)
{
    if (!filesystem::exists(url))
    {
        cout << "当前目录不存在" << endl;
    }
    else
    {
        filesystem::directory_iterator list(url);
        for (auto v : list)
        {
            rename(v.path(), make_name(url, v.path().filename()));
        }
    }
}
int main()
{
    traverseDirectory("C:\\Users\\Administrator\\Desktop\\JJDown\\Download");
    return 0;
}


只有本站会员才能查看附件,请 登录

但是程序中,还有一处,for循环的语法不能理解。。。。
第23行中。for循环括号中应该有3个表达式呀, 为什么这个for循环括号中只有一个表达式。。。

程序测试目录文件夹
只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2022-7-4 03:02编辑过]

5 回复
#2
wp2319572022-07-04 08:47
回复 楼主 追梦人zmrghy
摘录:
拷贝range的元素时,使用for(auto x : range).
for(auto a:b)中b为一个容器,效果是利用a遍历并获得b容器中的每一个值,但是a无法影响到b容器中的元素。

修改range的元素时,使用for(auto && x : range).
for(auto &a:b)中加了引用符号,可以对容器中的内容进行赋值,即可通过对a赋值来做到容器b的内容填充。

只读range的元素时,使用for(const auto & x : range).
#3
追梦人zmrghy2022-07-04 10:26
回复 2楼 wp231957
不理解,是什么原理
#4
wp2319572022-07-04 10:52
回复 3楼 追梦人zmrghy
这不需要原理,记住就可以了
类似PYTHON  range 循环一样
 for x in range:
     xxxx
都是固定语法,记住就好了,一定要追原理,那就涉及到内部机制了,,普通人没必要研究
#5
追梦人zmrghy2022-07-04 18:43
回复 4楼 wp231957
只知道
for(表达式1; 表达式2; 表达式3)

不理解,是如何循环的
for (auto v : list)
#6
rjsp2022-07-05 18:59
以下是引用追梦人zmrghy在2022-7-4 18:43:29的发言:

只知道
for(表达式1; 表达式2; 表达式3)

不理解,是如何循环的
for (auto v : list)

https://zh.
这就是C++增添的语法,C语言不支持。
1