《C++ Primer》第五版课后习题解答_第三章(3)(21-29)

系统环境: windows 10 1703

编译环境:Visual studio 2017


3.21

#include <iostream>
#include <string>
#include <vector>
using std::cout;
using std::endl;
using std::cin;
using std::string;
using std::vector;

// 以 v2 和 v7 为例
int main()
{
    vector<int> v2(10);
    vector<string> v7{ 10, "hi" };
    for (vector<int>::iterator a = v2.begin(); a != v2.end(); ++a)
    {
        cout << *a << endl;
    }
    for (auto b = v7.begin(); b != v7.end(); ++b)
    {
        cout << *b << endl;
    }
    return 0;
}

3.22

#include <iostream>
#include <string>
#include <vector>
using std::cout;
using std::endl;
using std::cin;
using std::string;
using std::vector;

int main()
{
    vector<string> text{5, "randomstring"};
    for (auto it = text.begin(); it != text.end() && !it->empty(); ++it)
    {
        for (auto &a : *it)
        {
            a = toupper(a);
        }
    }
    for (auto it2 = text.begin(); it2 != text.end() && !it2->empty(); ++it2)
    {
        cout << *it2 << endl;
    }
    return 0;
}

3.23

#include <iostream>
#include <string>
#include <vector>
using std::cout;
using std::endl;
using std::cin;
using std::string;
using std::vector;

int main()
{
    vector<int> ivec;
    cout << "Enter ten integers: " << endl;
    int i;
    while (cin >> i)
    {
        ivec.push_back(i);
    }
    for (auto b = ivec.begin(); b != ivec.end(); ++b)
    {
        *b *= 2;
        cout << *b << endl;
    }
    return 0;
}


3.24

#include <iostream>
#include <string>
#include <vector>
using std::cout;
using std::endl;
using std::cin;
using std::string;
using std::vector;

//相邻之和
int main()
{
    vector<int> ivec;
    int i;
    while (cin >> i)
    {
        ivec.push_back(i);
    }
    auto b = ivec.begin();
    auto e = ivec.end();

    for (b; b != (e - 1); ++b)
    {
        cout << (*b + *(b + 1)) << endl;
    }
    return 0;
}
#include <iostream>
#include <string>
#include <vector>
using std::cout;
using std::endl;
using std::cin;
using std::string;
using std::vector;

//首尾之和
int main()
{
    vector<int> ivec;
    int i;
    while (cin >> i)
    {
        ivec.push_back(i);
    }
    auto b = ivec.begin();
    auto e = (ivec.end() - 1);

    for (b; b <= e; ++b)
    {
        if (b != e)
        {
            cout << (*b + *(e)) << endl;
            --e;
        }
        else
        {
            cout << "This is the middle number: " << *b << endl;
        }
    }

    return 0;
}

3.25

#include <iostream>
#include <string>
#include <vector>
using std::cout;
using std::endl;
using std::cin;
using std::string;
using std::vector;

int main()
{
    vector<int> result(11, 0);
    auto b = result.begin();
    unsigned i;
    while (cin >> i)
    {
        if (i <= 100)
        {
            int n = i / 10;
            *(b + n) += 1;
        }
    }
    for (auto a : result)
    {
        cout << a << endl;
    }
    return 0;
}


3.26

因为前者会避免溢出。在后者的计算过程中,在 (beg + end) 这一步中有可能出现比 end 大的数,而前者的计算过程就不会出现这种风险。


3.27

(a) 非法,buf_size 不是常量表达式;

(b) 合法;

(c) 非法,txt_size() 不是常量表达式;

(d) 非法,没有空间存放空字符。


3.28

sa 空字符

ia 0

sa2 空字符

ia2 undefined

// 中文版 p40 有详细说明


3.29

相较于 vector,数组的大小在定义时就固定了。数组的大小固定不变,不能随意向数组中增加元素,损失了一些灵活性。

posted @ 2017-08-25 09:53  Adam_fei  阅读(129)  评论(0编辑  收藏  举报