C++Primer第五版 6.5.3节练习

本文介绍了一种使用递归方式打印vector容器内元素的方法,并在打印过程中加入了调试信息的输出功能。通过两种不同的调试模式(开启和关闭调试信息),演示了如何在程序运行时获取vector的大小等执行细节。

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

练习6.47:改写6.3.2节(第205页)练习中使用递归输出vector内容的程序,使其有条件地输出与执行过程有关的信息。例如,每次调用时输出vector对象的大小。分别在打开和关闭调试器的情况下编译并执行这个程序。

练习6.48:说明下面这个循环的含义,它对assert的使用合理吗?

string s;
while (cin >> s && s != sought) {} //空函数体
assert(cin);

答:不合理,当不再输入,或者s = sought时,此时cin为空,表达式求值为假,断言实现,输出错误信息,并退出程序。

练习6.47

/*
*练习6.47 
*2015/6/25
*问题描述:练习6.47:改写6.3.2节(第205页)练习中使用递归输出vector内容的程序,使其有条件地输出与执行过程有关的信息。例如,每次调用时输出vector对象的大小。分别在打开和关闭调试器的情况下编译并执行这个程序。
*功能:递归改写 
*作者:Nick Feng 
*邮箱:nickgreen23@163.com 
* 
*/

#include <iostream>
#include <vector>

using namespace std;

void print(vector<string> vec, vector<string>::size_type n) // 
{

    if (n != vec.size()-1)   
        print(vec,n+1);

      cout << vec[n] <<" ";   
}


void print_debug(vector<string> vec, vector<string>::size_type n) //关闭调试状态 
{
    #ifndef NDEBUG
    cerr << __func__ << ": size is " << vec.size() << endl;
    #endif 
    if (n != vec.size()-1)
       cout << vec[n] <<" ";

      print(vec,n+1);   
}

void print_debug_2(vector<string> vec, vector<string>::size_type n)//打开调试状态 
{

    cerr << __func__ << ": size is " << vec.size() << endl;

    if (n != vec.size()-1)
       cout << vec[n] <<" ";

      print(vec,n+1);   
}
int main()
{
    vector<string> vec;
    string s;
    while (cin >> s)
        vec.push_back(s);

    vector<string>::size_type n = 0; 
    print(vec,n);
    cout << endl;
    print_debug(vec,n);
    cout << endl;
    print_debug_2(vec,n);
    return 0;
} 
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值