C++Primer第五版 9.3.3节练习
2015-09-18 07:23
525 查看
练习9.25:对于第312页中删除一个范围内的元素的程序,如果elem1与elem2相等,会发生什么?如果elem2是尾后迭代器,或者elem1和elem2皆为尾后迭代器,又会发生什么?
答:没有删除任何元素,因为elem1,elem2都指向同一个迭代器,这之间没有别的迭代器,因此,不会删除别的元素。
见练习9.25.cpp
练习9.26:使用下面代码定义的ia,将ia拷贝到一个vector和一个list中。使用单迭代器版本的erease从list中删除奇数元素,从vector中删除偶数元素。
答:见练习9.26.cpp
练习9.25
练习9.26
答:没有删除任何元素,因为elem1,elem2都指向同一个迭代器,这之间没有别的迭代器,因此,不会删除别的元素。
见练习9.25.cpp
练习9.26:使用下面代码定义的ia,将ia拷贝到一个vector和一个list中。使用单迭代器版本的erease从list中删除奇数元素,从vector中删除偶数元素。
int ia[]= {0,1,1,2,3,5,8,13,21,55,89}
答:见练习9.26.cpp
练习9.25
/* *练习9.25 *2015/8/1 *问题描述:练习9.25:对于第312页中删除一个范围内的元素的程序,如果elem1与elem2相等,会发生什么?如果elem2是尾后迭代器,或者elem1和elem2皆为尾后迭代器,又会发生什么? *功能:没有删除 *作者:Nick Feng *邮箱:nickgreen23@163.com * */ #include <iostream> #include <string> #include <vector> using namespace std; int main() { vector<string> vec = {"This","is","a","test!"}; vector<string>::iterator elem1 = vec.begin(); vector<string>::iterator elem2 = vec.begin(); vector<string>::iterator elem3 = vec.end(); vector<string>::iterator elem4 = vec.end(); for(auto i = 0; i != vec.size(); ++i) cout << vec[i] << " "; cout << endl; vec.erase(elem1,elem2); for(auto i = 0; i != vec.size(); ++i) cout << vec[i] << " "; cout << endl; vec.erase(elem3,elem4); for(auto i = 0; i != vec.size(); ++i) cout << vec[i] << " "; cout << endl; return 0; }
练习9.26
/* *练习9.26 *2015/8/1 *问题描述:练习9.26:使用下面代码定义的ia,将ia拷贝到一个vector和一个list中。使用单迭代器版本的erease从list中删除奇数元素,从vector中删除偶数元素。 *int ia[]= {0,1,1,2,3,5,8,13,21,55,89} *功能:对erease的使用 *说明:如果你清楚容器内部的类型,尽量不要用auto和decltype,因为,有时候编译器不是很靠谱 *作者:Nick Feng *邮箱:nickgreen23@163.com * */ #include <iostream> #include <list> #include <vector> using namespace std; int main() { int ia[] = {0,1,1,2,3,5,8,9,13,21,55,89}; list<int> lst; vector<int> vec; for(int i = 0; i != 12; ++i) { vec.push_back(ia[i]); lst.push_back(ia[i]); cout << ia[i] << " "; } cout << endl; vector<int>::iterator it = vec.begin(); while(it != vec.end()) { if(*it%2==0) { it = vec.erase(it);//删除偶数元素 } else ++it; } for(auto i = 0; i != vec.size();++i) cout << vec[i] << " "; cout << endl; list<int>::iterator item = lst.begin(); while(item != lst.end()) { if(*item%2) { item = lst.erase(item); } else ++item; } list<int>::iterator item1 =lst.begin(); while(item1 != lst.end()) { cout <<*item1<< " "; ++item1; } cout << endl; return 0; }
相关文章推荐
- C++Primer第五版 9.3.2节练习
- C++程序与非C++程序的链接
- 单例模式简介以及C++版本的实现
- c++ primer第五版(中文)习题答案 第十章第一节第一小节-概述
- C++:数组排列组合的问题。
- 插入排序(C/C++)
- const在函数前与函数后的区别
- c++设计模式----Decorator(装饰)
- C语言 可变长度的数组 -2
- TwinCAT 3中基于UDP协议通讯的C++实现
- Leetcode之String to Integer (atoi)
- C++面试题
- 字符替换 利用c++string类型
- 关于C语言中数据类型的转化方式
- C语言中的break、continue和goto语句
- C++Primer Plus 第十一章-运算符重载和友元函数
- C语言中经常遇到的问题:执行时显示进度条,然后卡住
- C语言中的switch语句
- C/C++堆栈详解
- 问题之编程语言_c语言_无符号计算