您的位置:首页 > 编程语言 > C语言/C++

C++Primer 第五版 9.3.1节练习

2015-09-17 07:33 351 查看
练习9.18:编写程序,从标准输入中读取string序列,存入一个deque中。编写一个循环,用迭代器打印deque中的元素。

答:见 练习9.18.cpp

练习9.19:重写上题的程序,用list替代deque。列出程序要做出哪些改变。

答:见 练习9.19.cpp

练习9.20:编写程序,从一个
list<int>
拷贝元素到两个deque中。值为偶数的所有元素都拷贝到一个deque中,而奇数值元素都拷贝到另一个deque中。


答: 见 练习9.20.cpp

练习9.21:如果我们将第308页中使用insert返回值将元素添加到list中的循环程序改写为将元素插入到vector中,分析循环将如何工作。

答:见练习9.21.cpp 说实话,没怎么看懂题目。循环过程和P308页基本相同。参考P308

练习9.22:假定iv是一个int的vector,下面的程序存在什么错误?你将如何修改?

vector<int>::iterator iter = iv.begin(), mid = iv.begin() + iv.size()/2;
while(iter != mid)
    If(*iter == some_val)
        iv.insert(iter,2*some_val);


答:缺少一行,++iter,否则,iter != mid条件一直为真,程序陷入死循环中。 见练习9.22.cpp

练习9.18

/*
*练习9.18
*日期:2015/7/28
*问题描述:练习9.18:编写程序,从标准输入中读取string序列,存入一个deque中。编写一个循环,用迭代器打印deque中的元素。
*功能; 操作deque 
*作者:Nick Feng 
*邮箱:nickgreen23@163.com 
*/

#include <iostream>
#include <deque>
#include <string>

using namespace std;

int main()
{
    string str;
    deque<string> deq;
    while(cin >> str)
    {
        deq.push_back(str);
    }

    auto iter1 = deq.begin();
    auto iter2 = deq.end();
    while(iter1 != iter2)
    {
        cout << *iter1 << " ";
        ++iter1;
    }
    cout << endl; 
    return 0;
}


练习9.19

/*
*练习9.19 
*日期:2015/7/28 
*问题描述:练习9.19:重写上题的程序,用list替代deque。列出程序要做出哪些改变。
*功能;操作list 
*作者:Nick Feng 
*邮箱:nickgreen23@163.com 
*/

#include <iostream>
#include <list>
#include <string>

using namespace std;

int main()
{
    string str;
    list<string> li;
    while(cin >> str)
    {
        li.push_back(str);
    }

    auto iter1 = li.begin();
    auto iter2 = li.end();
    while(iter1 != iter2)
    {
        cout << *iter1 << " "; 
        ++iter1;
    }
    cout << endl;
    return 0;
 }


练习9.20

/*
*练习9.20 
*日期:2015/7/28 
*问题描述:练习9.20:编写程序,从一个list<int>拷贝元素到两个deque中。值为偶数的所有元素都拷贝到一个deque中,而奇数值元素都拷贝到另一个deque中。
*功能;
*作者:Nick Feng 
*邮箱:nickgreen23@163.com 
*/

#include <iostream>
#include <list>
#include <deque>

using namespace std;

int main()
{
    list<int> li = {1,2,3,4,5,6,7,8,9,10};
    deque<int> deq_odd,deq_even;
    auto iter1 = li.begin();
    auto iter2 = li.end();
    while(iter1 != iter2)
    {
        if(*iter1 % 2 == 0)
          deq_even.push_back(*iter1);
        else
          deq_odd.push_back(*iter1);
        ++iter1;
    }

    for(auto it = li.begin(); it != li.end(); ++it) 
    //auto要紧贴着用,否则就会出现意想不到的错误 
        cout << *it << " ";
        cout << endl;

    for(auto i = 0; i != deq_odd.size(); ++i)
        cout << deq_odd[i] << " ";
        cout << endl;

    for(auto i= 0; i != deq_even.size(); ++i)
        cout << deq_even[i] << " ";
        cout << endl;
    return 0;
}


练习9.21

/*
*练习9.21
*日期:2015/7/28
*问题描述:练习9.21:如果我们将第308页中使用insert返回值将元素添加到list中的循环程序改写为将元素插入到vector中,分析循环将如何工作。
*功能;
*作者:Nick Feng 
*邮箱:nickgreen23@163.com 
*/

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

int main()
{
    vector<string> vec;
    string word;
    auto iter = vec.begin();
    while(cin >> word)
        iter = vec.insert(iter,word);

    for(auto it = vec.begin(); it != vec.end(); ++it)
        cout << *it << " ";
        cout << endl;

    return 0;
 }


练习9.22

/*
*练习9.22
*日期:2015/7/28
*问题描述:
*练习9.22:假定iv是一个int的vector,下面的程序存在什么错误?你将如何修改?
*Vector<int>::iterator iter = iv.begin(), mid = iv.begin() + iv.size()/2;
*While(iter != mid)
*   If(*iter == some_val)
*       iv.insert(iter,2*some_val);
*功能;改错 
*作者:Nick Feng 
*邮箱:nickgreen23@163.com 
*/

#include <iostream>
#include <vector>

using namespace std;

int main()
{
   vector<int> vec = {1,2,3,4,5,6,7,8};
   for(auto i = 0; i != vec.size(); ++i)
    cout << vec[i] << " ";
    cout << endl;

   vector<int>::iterator iter1 = vec.begin();
   vector<int>::iterator iter2 = vec.begin() + vec.size()/2;

   while(iter1 != iter2)
   {
    if(*iter1 == 2)
    vec.insert(iter1,2 * 5);
    ++iter1;
    //缺少一行,++iter,否则,iter != mid条件一直为真,程序陷入死循环中。 
   }

   for(auto i = 0; i != vec.size(); ++i)
    cout << vec[i] << " ";
    cout << endl;

    return 0;
 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: