C++primer[习题][第三章][21-30]

  • 3.21
#include 
#include 

using std::cin;
using std::cout;
using std::endl;
using std::vector;
int main()
{
    vector<int> ivec(10, 42);
    for (auto i = ivec.begin(); i != ivec.end(); i++)
    {
        cout << *i << " ";
    }
    return 0;
}
  • 3.22
#include 
#include 
#include 

using std::cin;
using std::cout;
using std::endl;
using std::vector;
using std::string;
int main()
{
    vector<string> svec(10, "hello ");
    for (auto i = svec.begin(); i != svec.end(); i++)
    {
        for (auto &c : (*i))
        {
            c = toupper(c);
        }
        cout << *i;
    }
    return 0;
}
  • 3.23
#include 
#include 

using std::cin;
using std::cout;
using std::endl;
using std::vector;
int main()
{
    vector<int> ivec(10, 20);
    for (auto &c : ivec)
    {
        c *= 2;
    }
    for (auto &c : ivec)
    {
        cout << c << " ";
    }
    return 0;
}
  • 3.24
#include 
#include 

using std::cin;
using std::cout;
using std::endl;
using std::vector;
int main()
{
    vector<int> ivec(10, 20);
    for (auto i = ivec.begin(); i != ivec.end() - 1; i++)
    {
        cout << *i + *(i + 1) << " ";
    }
    auto i = ivec.begin();
    auto j = ivec.end() - 1;
    while (i < j)
    {
        cout << *i + *j << " ";
        i++;
        j--;
    }
    return 0;
}
  • 3.25
#include 
#include 
using std::cin;
using std::cout;
using std::endl;
using std::vector;

int main()
{
    vector<unsigned> scores(11, 0);
    auto scoresiter = scores.begin();
    unsigned grade;
    while (cin >> grade)
    {
        if (grade <= 100)
        {
            ++*(scoresiter + grade / 10);
        }
    }
    for (auto score : scores)
    {
        cout << score << " ";
    }
    return 0;
}
  • 3.26

迭代器没有加法运算,end-beg表示当前位置与起始位置之间相隔多少元素,除2则为中间位置与beg的差距,加上beg则表示将beg移动到中间位置。

  • 3.27
unsigned buf_size = 1024;
int ia[buf_size];               //非法,buf_size必须是个常量表达式
int ib[4 * 7 - 14];             //正确。
int ic[txt_size()];             //非法,txt_size()必须是个常量值
char st[11] = "fundamental";    //非法,数组大小应该为12
  • 3.28
string sa[10];          //值为空字符串
int ia[10];             //值全为0
int main()
{
    string sa2[10];     //值为空字符串
    int ia2[10];        //未定义值
    return 0;
}
  • 3.29

1.数组定长。
2.数组不可以随意增加删除元素。

  • 3.30
constexpr size_t array_size = 10;
int ia[array_size];
for (size_t ix = 1; ix <= array_size; i++)
{
    ia[ix] = ix;
}

当ix到10,下标越界,需要改成size_t ix = 0; ix < array_size; i++

你可能感兴趣的:(C++primer)