C++ primer(第五版) 练习 6.47
题目:
改写6.3.2节 练习6.33 中使用递归输出vector内容的程序,使其有条件地输出与执行过程有关的信息。
例如,每次调用时输出vector对象的大小。
分别在打开和关闭调试器的情况下编译并执行这个程序。
关于这个题目还发现个现象:main函数所在文件最开始的地方 #define * 这个星号,只要跟 #ifndef * 这个星号相同就会忽略#ifnden和#endif 之间的内容。
答:
#define nnnnn
#include <iostream>
#include <vector>
#include <string>
#include <cassert>
using std::cout;
using std::cin;
using std::endl;
using std::string;
using std::vector;
void print(const vector<string> &s)
{
#ifndef nnnnn
cout << s.size() << endl;
#endif
static vector<string>::size_type i = 0; //局部静态变量,函数结束值依然有效(否则程序会死循环挂掉……)
if (i < s.size())
{
cout << s[i++] << " ";
print(s);
}
}
int main()
{
vector<string> str = { "hello", "hi", "see", "you" };
print(str);
cout << endl;
return 0;
}
执行结果:
1。注释掉 #define
2.不注释#define