练习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;
}