use*_*501 7 c++ loops for-loop c-preprocessor
也许它不是很好的编程实践,但可以定义for循环宏吗?
例如,
#define loop(n) for(int ii = 0; ii < n; ++ ii)
Run Code Online (Sandbox Code Playgroud)
效果很好,但不能让你改变变量名ii.
它可以用于:
loop(5)
{
cout << "hi" << " " << "the value of ii is:" << " " << ii << endl;
}
Run Code Online (Sandbox Code Playgroud)
但是没有名称/符号的选择ii.
可以这样做吗?
loop(symbol_name, n)
Run Code Online (Sandbox Code Playgroud)
程序员将符号名称插入" symbol_name".
用法示例:
loop(x, 10)
{
cout << x << endl;
}
Run Code Online (Sandbox Code Playgroud)
MSa*_*ers 13
在今天的C++中,我们不会使用宏,但我们使用模板和仿函数(包括lambda):
template<typename FUNCTION>
inline void loop(int n, FUNCTION f) {
for (int i = 0; i < n; ++i) {
f(i);
}
}
// ...
loop(5, [](int jj) { std::cout << "This is iteration #" << jj << std::endl; } );
Run Code Online (Sandbox Code Playgroud)
该loop函数在i内部使用变量,但lambda没有看到.这是内部的loop.相反,lambda定义了一个参数jj并使用该名称.
除了lambda之外,您还可以传递任何函数,只要它接受单个整数参数即可.你甚至可以传递std::to_string<int>- 不会loop对结果字符串做一些有用的事情,但语法允许它.
#define loop(x, n) for(int x = 0; x < n; ++ x)
Run Code Online (Sandbox Code Playgroud)
#include <iostream>
using namespace std;
#define loop(x, n) for(int x = 0; x < n; ++ x)
int main() {
loop(i, 10)
{
cout << i << endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)