10.1

#include<iostream>
#include<vector>
#include<algorithm>
#include<fstream>
using namespace std;
int main(int argc,const char*argv[]){/*ifstream in(argv[1]);if(!in){cout << "打开输入文件失败" << endl;exit(1);}*/ //这一段的含义完全没有看懂vector<int> nums;int number;while (cin >> number){nums.push_back(number);}cout << count(nums.begin(),nums.end(),4) << endl;return 0;
}

困惑:
这一段程序的含义没有看懂

ifstream in(argv[1]);if(!in){cout << "打开输入文件失败" << endl;exit(1);}

10.5

#include<iostream>
#include<vector>
#include<algorithm>
#include<fstream>
#include<string>
#include<list>
#include<numeric>
#include<string.h>
using namespace std;
int main(void){char *p[] = {"Hello","World","!"};char *q[] = {strdup(p[0]),strdup(p[1]),strdup(p[2])};//strdup()为字符串拷贝函数,为复制的字符串分配空间,返回分配空间后的指针//不再使用该空间之后,要使用函数free()释放分配的内存char *r[] = {p[0],p[1],p[2]};cout << equal(begin(p),end(p),q) << endl;cout << equal(begin(p),end(p),r) << endl;//begin()返回的是数组首元素指针,end()返回的是数组尾部元素的指针return 0;
}

10.27

#include<iostream>
#include<vector>
#include<list>
#include<algorithm>
#include<iterator>
using namespace std;
int main(void){vector<int> nums;int number;while (cin >> number){nums.push_back(number);}sort(nums.begin(),nums.end());// int size = nums.size();//list<int> lt(size);// unique_copy(nums.begin(),nums.end(),lt.begin);//纠结了好久不知道该如何确定lt容器的大小list<int> lt;unique_copy(nums.begin(),nums.end(),back_inserter(lt));for(auto v : lt){cout << v << " ";}cout << endl;return 0;
}

begin()、end()之类的迭代器指明了元素的位置,不能够是实现插入,back_inserter()之类的函数既能够指明位置又能够实现插入。

10.28

#include<iostream>
#include<vector>
#include<list>
#include<algorithm>
#include<iterator>
using namespace std;
int main(void){vector<int> nums = {1,2,3,4,5,6,7,8,9};list<int> lt1,lt2,lt3;copy(nums.begin(),nums.end(),front_inserter(lt1));copy(nums.begin(),nums.end(),back_inserter(lt2));copy(nums.begin(),nums.end(),inserter(lt3,lt3.begin()));for(auto it1 = lt1.begin();it1 != lt1.end();it1++){cout << *it1;}cout << endl;for(auto it2 = lt2.begin();it2 != lt2.end();it2++){cout << *it2;}cout << endl;for(auto it3 = lt3.begin();it3 != lt3.end();it3++){cout << *it3;}cout << endl;return 0;
}

front_iterator ()向容器中添加元素是倒着添加的。

10.34

#include<iostream>
#include<vector>
#include<list>
#include<algorithm>
#include<iterator>
using namespace std;
int main(void){vector<int> nums = {1,2,3,4,5,6,7,8,9};// vector<int>::reverse_iterator it;for(auto it = nums.rbegin();it != nums.rend();it++){cout << *it;}cout << endl;
}

10.35

#include<iostream>
#include<vector>
#include<list>
#include<algorithm>
#include<iterator>
using namespace std;
int main(void){vector<int> nums = {1,2,3,4,5,6,7,8,9};// vector<int>::reverse_iterator it;for(auto it = nums.end()-1;it != nums.begin()-1;it--){cout << *it;}cout << endl;//答案的做法for(auto r_it = nums.end();r_it != nums.begin();){cout << *(--r_it);//先减小后输出}cout << endl;
}

10.36

#include<iostream>
#include<vector>
#include<list>
#include<algorithm>
#include<iterator>
using namespace std;
int main(void){list<int> nums = {1,2,0,4,5,0,7,0,9};auto last_z = find(nums.rbegin(),nums.rend(),0);//如何知道反向迭代器指向的是第几个last_z++;//保证使用正向迭代器的时候,能够指向最后一个0//int p = 0;这个的初始化不对,移动的次数会比所有的元素的个数少一int p = 1;for(auto it = nums.begin();it != last_z.base();it++){p++;}if(p >= nums.size())cout << "不存在0" << endl;else cout << "the position of last zore is " << p << endl;return 0;
}

10.37

#include<iostream>
#include<vector>
#include<list>
#include<algorithm>
#include<iterator>
using namespace std;
int main(void){ostream_iterator<int> out_iter(cout," ");//don't understandvector<int> vi = {0,1,2,3,4,5,6,7,8,9};copy(vi.begin(),vi.end(),out_iter);cout << endl;list<int> li;vector<int>::reverse_iterator re(vi.begin()+2);//using iterator to initialize reverse iteratorvector<int>::reverse_iterator rb(vi.begin()+7);copy(rb,re,back_inserter(li));copy(li.begin(),li.end(),out_iter);cout << endl;return 0;
}
/*int main(void){vector<int> nums = {1,2,3,4,5,6,7,8,9,10};list<int> lt;copy(nums.rbegin()+3,nums.rbegin()+8,back_inserter(lt));//拷贝数字【3,7】,由于copy为左开右闭区间,应该加上的数字为8for(auto it = lt.begin();it != lt.end();it++){cout << *it;}cout << endl;return 0;
}*/

1)ostream_iterator (os,str)
将T类型的元素输出到输出流中,每个元素后面追加一个C元素风格的字符串,
2)可以用正向迭代器初始化反向迭代器,其效果等同于将迭代器所指向的位置向前移动一位

10.38
列出五个迭代器的类别,以及每个迭代器所支持的操作。

1、输入迭代器——用于读取迭代器所指向的元素的内容
1)能够进行迭代器之间的比较。(用于确定输入和输出的范围)
2)能够进行解引用,通过指针获取元素具体的内容
3)能够通过递增和递减元素进行位置的移动
(确定范围,移动位置,解引用获取具体的内容)

2、输出迭代器——用于向容器内写入指定元素
1)能够通过递增和递减来进行定位,确定输入元素的位置
2)解引用运算符,指定其输入的位置

3、向前迭代器——支持单向扫描元素(如果从后向前也算是单向迭代器吗?
1)输入和输出的迭代器的操作都支持
2)只能单向读写元素

4、双向迭代器——能够双向读写元素
1)除了forward_list,其他容器都支持双向迭代器

5、随机访问迭代器——随机读写元素
1)具有能够比较两个迭代器关系的比较操作符
2)迭代器能够与数字相加减
3)迭代器之间能够相减得到相对的距离
4)具有下标运算符

不明白

2021-07-26c++primer 第10章的习题相关推荐

  1. C++Primer 第10章lambda表达式

    C++Primer 第10章lambda表达式 泛型编程 咱们继续高歌猛进,下面我给大家继续讲关于算法的故事. 我们知道标准库容器中定义的算法大多数独立在算法之外,通常这些算法是通用的.它们可以处理不 ...

  2. C++Primer 第10章 bind与迭代器

    C++Primer 第10章 bind与迭代器 //10.20,10.22 #include<iostream> #include<vector> #include<st ...

  3. c语言已知某班男生有n1,C语言程序设计–第10章课后习题.pdf

    <C语言程序设计–第10章课后习题.pdf>由会员分享,可在线阅读,更多相关<C语言程序设计–第10章课后习题.pdf(11页珍藏版)>请在装配图网上搜索. 1.C语言程序设计 ...

  4. 《Java黑皮书基础篇第10版》 第10章【习题】

    Java语言程序设计 习题第十章 10.2章节习题 10.1 如果重新定义程序清单102中的Loan类,去掉其中的设置方法,这个类是不可改变的吗? 这个类依然是可以改变的,因为每一笔贷款作为一个对象, ...

  5. C++ primer 第10章 泛型算法

    文章目录 概述 find count 初识泛型算法 只读算法 只读算法accumulate 只读算法equal 写容器元素的算法 算法fill 算法fill_n back_inserter 算法cop ...

  6. C++ Primer 第10章 习题10.23

    //10.23.cpp //编写程序将被排除的单词存储在vector对象中,而不是存储在set对象中 //函数restricted_wc,根据形参指定文件建立单词排除集 //将被排除的单词存储在vec ...

  7. C++ Primer 第10章 pair类型

    //10.2.cpp //至少使用三种方法创建pair对象. //编写三个版本的程序,分别采用不同的方法来创建pair对象 //方法1:在定义pair对象时提供初始化式来创建pair对象#includ ...

  8. C++ Primer 第10章 习题10.24

    //10.24.cpp //建立一个单词排除集 //用于识别以's'借位.但这个结尾的's',又不能删除的单词 //使用这个排除集删除输入单词尾部的's',生成该单词的非复数版本 //如果输入的是排除 ...

  9. C++ Primer 第10章 习题 10.18

    //10-18.cpp //定义一个map对象,其元素的键是家族姓氏, //而值则是存储该家族孩子名字的vector对象. //进行基于家族姓氏的查询,输出该家族的所有孩子的名字 #include&l ...

最新文章

  1. 太胖就会变秃,这回真的有依据了!日本学者发现肥胖会诱导毛囊衰竭 | Nature...
  2. c语言编程取模运算ppt,c语言的取模运算
  3. 苹果自带相册打马赛克_老王被绿?iOS 13惊现漏洞,马赛克去除
  4. 第9条:用生成器表达式来改写数据量较大的列表推导式
  5. matcom , 连接matlab和Microsoft visual studio
  6. Android L(5.0)源码之图形与图像处理之动画——Frame、Tween、属性动画、SurfaceView...
  7. 北京尚学堂|程序员的智慧
  8. java list初始值null_关于list集合存储null的问题
  9. Struts2之Action的基本配置
  10. kibana集成内部账号_揭开 Elasticsearch 中身份验证和授权的神秘面纱
  11. 8、ns-3可视化工具
  12. RFID FDX HDX Technology
  13. 惠普打印机墨盒更换教程_惠普打印机安装步骤 打印机墨盒加墨方法
  14. cad转pdf格式简易步骤
  15. isis协议配置和详解
  16. android 7.1 字体大小设置,微信安卓版7.0.4字体大小被吐槽,微信官方回应又被吐槽...
  17. 【C语言】扫雷(递归展开 + 标记功能)
  18. 了解交换机、路由器、网关的概念以及它们各自属于什么层次?
  19. 曾国藩家书-修身篇 致诸弟·明师益友虚心请教
  20. 如何用人工智能预测股票(完整答案)

热门文章

  1. 手写链表底层实现(java实现)
  2. 会声会影2022完美收官,2023下个版本再见!
  3. 使用scp在俩台电脑上传输文件
  4. REAL-WORD MACHINE LEANING(翻译本--第一部分)
  5. MacOS ping命令 |MacOS测试服务器连接|Mac ping服务器端口
  6. GoodGuy -试图去揣摩一个好产品会如何进行消息推送管理平台的需求设计
  7. Ubuntu镜像下载路径
  8. 末日觉醒服务器端文件,CryoFall末日觉醒GM指令大全 服务器管理员指令汇总
  9. java 单线程执行器_Java基础-并发编程-线程执行器executor
  10. PyQt5随笔:给PyQt5 界面添加右键菜单