c++primer练习4.6-4.12

4.20

vector<string>::iterator iter;
*iter++;
(*iter)++;
*iter.empty();
iter->empty()
++*iter;
iter++->empty();

 

#include <vector>
#include <iostream>
using namespace std;

int main()
{
    vector<string> i = {"0","1","2","3"};
    vector<string>::iterator iter;
    for(iter = i.begin(); iter != i.end(); )
    {
        cout << *iter++ <<endl;
    }

}

表达式合理,输出0 1 2 3,表达式的含义是取迭代器指向的参数的值,迭代器向后移一位.

  • (a)合法。返回迭代器所指向的元素,然后迭代器递增。
  • (b)不合法。因为vector元素类型是string,没有++操作。
  • (c)不合法。这里应该加括号,变为(*iter).empty()。
  • (d)合法。判断迭代器当前的元素是否为空。
  • (e)不合法。string类型没有++操作。
  • (f)合法。判断迭代器当前元素是否为空,然后迭代器递增。

4.21.

#include <vector>
#include <iostream>
using namespace std;

int main()
{
    vector<int> shuZu = {0,1,2,3,4,5,6,7,8,9,10};
    vector<int>::iterator iter;
    for(iter = shuZu.begin(); iter != shuZu.end(); iter++)
    {
        if((*iter)%2 == 1)
        {
            *iter = 2*(*iter);
        }
        cout << *iter << endl;
    }
}

4.22

(1)

#include <string>
#include <iostream>
using namespace std;

int main()
{
    int grade;
    string finalgrade;
    cin >> grade;
    finalgrade = (grade >= 90 ) ? "high pass" :(grade >= 75) ? "pass" :(grade >= 60) ? "low pass" :"failed";
    cout << finalgrade << endl;
    system("pause");
}

(2)

#include <string>
#include <iostream>
using namespace std;

int main()
{
    int grade;
    string finalgrade;
    cin >> grade;
    if(grade >= 90)
    {
        finalgrade = "high pass";
    }

    if(grade >= 75 && grade < 90)
    {
        finalgrade = "pass";
    }

    if(grade >= 60 && grade < 75)
    {
        finalgrade = "low pass";
    }

    if(grade < 60)
    {
        finalgrade = "fail";
    }

    cout << finalgrade << endl;

    system("pause");
}

4.23 由于这一条表达式中 == 的优先级高于 = ,所以会先做 == ,就会造成把bool型赋给string的错误,+运算时这条表达式中优先级最高的所以改为 

string  p1 = s +(s[s.size()-1] == 's' ? "" : "s");

4.24

如果条件运算符满足的是左结合律。那么

finalgrade = (grade > 90) ? "high pass" : (grade <60 ) ? "fail" :"pass";

等同于 

finalgrade = ((grade > 90) ? "high pass" : (grade < 60)) ? "fail" : "pass"; 

假如此时 grade > 90 ,第一个条件表达式的结果是 "high pass" ,而字符串字面值的类型是 const char *,非空所以为真。因此第二个条件表达式的结果是 "fail"。这样就出现了自相矛盾的逻辑。

上一篇:C++ Primer学习笔记 - 第13章 拷贝控制


下一篇:C++ Primer 第六章 函数