C++Primer第五版 第十章习题答案(31~40)
2017-02-28 09:37
387 查看
31:知识点:unique_copy()去掉了重复元素
32:没看到需要用到流迭代器的~
33:知识点:有一点需要注意的就是流迭代器不支持递减运算,因为不可能在流中反向移动
34:知识点1:反向迭代器,加上r,反向迭代器需要的是递减运算符,操作会从cbegin()反向处理string
知识点2:rbegin()指向的是最后一个元素,rend()指向的是首元素之前的位置
知识点3:通过调用反向迭代器的base()成员函数,可以将其转换为对应的普通迭代器
35:
36:
37:知识点:反向迭代器++是递减的运算符,向后移动,--是递增的运算符,向前移动
38:知识点1:5种迭代器类别,注重理解即可,主要就是是否可读写,是单边扫描还是多遍扫描,支持递减还是递增操作
知识点2:输入迭代器:可以读取序列中的元素。输出迭代器,看作是输入迭代器的补集,可写。前向迭代器:单向,支持输入输出。双向迭代器:双向,支持读写,还支持递增递减运算符。随机访问迭代器:基本支持所有功能。
39:list:双向迭代器。vector:随机访问迭代器
40:
copy的三个参数,第一二个数输入迭代器,第三个是输出迭代器
reverse肯定是需要双向迭代器的
unique是前向迭代器
#include<iostream> #include<fstream> #include<string> #include<vector> #include<algorithm> #include<numeric> #include<functional> #include<iterator> using namespace std; using namespace placeholders;//占位符的命名空间 int main(int argc, char**argv) { vector<int> vec1; //创建流迭代器、尾后迭代器,最好是这样,放在一起,不然很可能类型不同就会报错 istream_iterator<int> str(cin), end; // while (str != end) // { // vec1.push_back(*str++); // // }//此操作和copy一样的效果,只不过要记得++. unique_copy(str,end,back_inserter(vec1));//存入vec1,unique_copy只会留下不重复元素 sort(vec1.begin(),vec1.end());//不能用cbegin(),我日 for (int i = 0; i < vec1.size(); ++i) { cout<<vec1[i]<<endl; } return 0; }
32:没看到需要用到流迭代器的~
33:知识点:有一点需要注意的就是流迭代器不支持递减运算,因为不可能在流中反向移动
#include<iostream> #include<fstream> #include<string> #include<vector> #include<algorithm> #include<numeric> #include<functional> #include<iterator> using namespace std; using namespace placeholders;//占位符的命名空间 int main(int argc, char**argv) { ifstream in(/*argv[1]*/"1.txt");//导入第一个参数,作为输入文件 istream_iterator<int> it1(in),end;//定义流迭代器,输入流,和输入流的尾迭代器 vector<int> vec1;//存储用vector /* copy(it1,end,back_inserter(vec1));//将流中数据存入vector*/ while (it1 != end) { vec1.push_back(*it1); ++it1; } ofstream out(/*argv[2]*/"2.txt"); ofstream out2(/*argv[3]*/"3.txt");//目标写文件 ostream_iterator<int> it2(out,"\n");//定义流迭代器,输出流,每行结尾换行 ostream_iterator<int> it3(out2,"\n");//定义流迭代器,输出流,每行结尾换行 for (int i = 0; i<vec1.size(); ++i) { if (vec1[i]%2 == 0)//偶数 { it2++ = vec1[i];//偶数放在2.txt中 } else { it3++ = vec1[i];//奇数放在3.txt中 } } return 0; }
34:知识点1:反向迭代器,加上r,反向迭代器需要的是递减运算符,操作会从cbegin()反向处理string
知识点2:rbegin()指向的是最后一个元素,rend()指向的是首元素之前的位置
知识点3:通过调用反向迭代器的base()成员函数,可以将其转换为对应的普通迭代器
#include<vector> #include<algorithm> #include<numeric> #include<functional> #include<iterator> using namespace std; using namespace placeholders;//占位符的命名空间 int main(int argc, char**argv) { int a[5] = {1,2,3,4,5}; vector<int> day1(a,a+5); for (auto it1 = day1.rbegin(); it1 != day1.rend() ; ++it1)//这里的++实际上是递减的 { cout<<*it1<<" "; } return 0; }
35:
#include<iostream> #include<fstream> #include<string> #include<vector> #include<algorithm> #include<numeric> #include<functional> #include<iterator> using namespace std; using namespace placeholders;//占位符的命名空间 int main(int argc, char**argv) { int a[5] = {1,2,3,4,5}; vector<int> day1(a,a+5); for (auto it1 = day1.end(); it1 != day1.begin() ;--it1)//普通迭代器的--是向后移动 { cout<<*(it1-1)<<" "; } return 0; }
36:
#include<iostream> #include<fstream> #include<string> #include<vector> #include<list> #include<algorithm> #include<numeric> #include<functional> #include<iterator> using namespace std; using namespace placeholders;//占位符的命名空间 int main(int argc, char**argv) { int a[5] = {1,0,3,0,4}; list<int> list1(a,a+5); cout<< *find(list1.rbegin(),list1.rend(),0); return 0; }
37:知识点:反向迭代器++是递减的运算符,向后移动,--是递增的运算符,向前移动
#include<iostream> #include<fstream> #include<string> #include<vector> #include<list> #include<algorithm> #include<numeric> #include<functional> #include<iterator> using namespace std; using namespace placeholders;//占位符的命名空间 int main(int argc, char**argv) { int a[10] = {1,0,3,0,4,5,8,9,6,5}; vector<int> vec1(a,a+10); list<int> list1; //反向迭代器++是递减的运算符,向后移动,--是递增的运算符,向前移动 copy(vec1.rbegin()+3,vec1.rend()-2,back_inserter(list1)); for (auto it1 = list1.begin(); it1 != list1.end(); ++it1) { cout<<*it1<<" "; } return 0; }
38:知识点1:5种迭代器类别,注重理解即可,主要就是是否可读写,是单边扫描还是多遍扫描,支持递减还是递增操作
知识点2:输入迭代器:可以读取序列中的元素。输出迭代器,看作是输入迭代器的补集,可写。前向迭代器:单向,支持输入输出。双向迭代器:双向,支持读写,还支持递增递减运算符。随机访问迭代器:基本支持所有功能。
39:list:双向迭代器。vector:随机访问迭代器
40:
copy的三个参数,第一二个数输入迭代器,第三个是输出迭代器
reverse肯定是需要双向迭代器的
unique是前向迭代器
相关文章推荐
- C++Primer第五版 第十一章习题答案(31~38)
- C++Primer第五版 第六章习题答案(11~20)
- C++Primer第五版 第十六章习题答案(61~67)
- c++ primer第五版(中文)习题答案 第三章第二节-标准库类型string
- C++Primer第五版 第十六章习题答案(31~40)
- C++Primer第五版 第六章习题答案(31~40)
- C++Primer第五版 第二章习题答案(11~20)
- C++ primer plus 第十章课后习题,原创答案。
- C++Primer第五版 第十三章习题答案(31~40)
- c++ primer plus第十章习题答案
- C++Primer第五版 第五章习题答案(11~20)
- C++Primer第五版 第九章习题答案(31~40)
- C++Primer第五版 第十三章习题答案(11~20)
- C++Primer第五版 第七章习题答案(11~20)
- C++Primer第五版 第四章习题答案(11~20)
- C++Primer第五版 第十五章习题答案(31~40)
- C++Primer第五版 第七章习题答案(31~40)
- C++Primer第五版 第六章习题答案(1~10)
- C++Primer第五版 第三章习题答案(31~40)
- c++ primer第五版(中文)习题答案 第十章第二节第二小节-写容器元素的算法