欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

10.4 再探迭代器-插入/IO/反向

发布时间:2025/7/14 编程问答 35 豆豆
生活随笔 收集整理的这篇文章主要介绍了 10.4 再探迭代器-插入/IO/反向 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

10.4.1 插入迭代器

插入迭代器接受一个容器,生成一个迭代器,通过向该迭代器赋值可以实现向容器添加元素 
(1)back_inserter: 
接受一个参数, 
示例: 
auto iter = back_inserter(iVec); 
iter = value; 
(2)front_inserter: 
接受一个参数, 
示例: 
auto iter = front_inserter(iVec); 
iter = value; 
(3)inserter: 
接受两个参数,示例:auto iter = inserter(iVec, it); //it必须是一个指向iVec的迭代器, 
iter = value; //将value插入到it之前

习题 10.28 三种插入迭代器的应用

int main() {int array[] = { 1,2,3,4,5,6 };vector<int> iVec(begin(array), end(array));vector<int> iVec_back;deque<int> iDeque_front;list<int> iList_inserter;copy(iVec.begin(), iVec.end(), back_inserter(iVec_back));copy(iVec.begin(), iVec.end(), front_inserter(iDeque_front));copy(iVec.begin(), iVec.end(), inserter(iList_inserter, iList_inserter.begin()));system("pause"); } View Code

习题10.27

int main() {int array[] = { -2, 6, 1, 6, 5, -9, 4, -2, 8 };vector<int> iVec(begin(array), end(array));vector<int> iVecUnique;//元素排序,为拷贝不重复的元素做准备 stable_sort(iVec.begin(), iVec.end());//拷贝不重复的元素到iVecUnique unique_copy(iVec.begin(), iVec.end(), back_inserter(iVecUnique));system("pause"); } View Code

10.4.2 iostream迭代器

主要目的是使用算法操作流迭代器。

习题10.30 标准流迭代器的应用

int main() {istream_iterator<int> in_ite(cin); //定义输入流迭代器,并绑定标准输入流istream_iterator<int> in_end; //定义尾后迭代器,没有数据读入时迭代器就为尾后迭代器ostream_iterator<int> out_iter(cout); //定义输出流迭代器,并绑定标准输出流vector<int> iVec;copy(in_ite, in_end, back_inserter(iVec));sort(iVec.begin(), iVec.end());//排序copy(iVec.begin(), iVec.end(), out_iter);//输出到与 out_iter 绑定的标准输出设备system("pause"); } View Code

习题 10.29 使用流迭代器读取文件

int main() { ifstream ifstrm("h:\\1.txt"); //定义文件输入流istream_iterator<string> in_iter(ifstrm); //定义IO类的输入迭代器,并绑定ifstrmistream_iterator<string> in_end; //定义尾后迭代器,没有数据读入时迭代器就为尾后迭代器vector<string> strVec;copy(in_iter, in_end, back_inserter(strVec)); //利用copy算法将文件中的内容放到容器,以单词为组 system("pause"); } View Code

10.4.3反向迭代器

//假定有一个名为 line 的string,保存着一个逗号分隔的单词列表,我们希望打印line中的第一个单词和最后一个单词,则分别用正向迭代器和逆向迭代器 int main() { string line = "first,middle,last";auto comma = find(line.cbegin(), line.cend(), ','); //查找第一个逗号cout << string(line.cbegin(), comma) << endl;//打印最后一个单词auto rcomma = find(line.crbegin(), line.crend(), ','); //查找最后一个逗号cout << string(line.crbegin(), rcomma) << endl; //错误,输出 tsal 是逆序的//cout << string(rcomma, line.crbegin()) << endl; //错误,rcomma是一个逆向迭代器,而line.crbegin()返回尾后字符,所以会溢出cout << string(rcomma.base(), line.end()) << endl; //正确,反向迭代器调用base()函数会返回普通迭代器,注意调用后指向不同的元素,会移动一位system("pause"); } View Code

 

转载于:https://www.cnblogs.com/liyubo/p/7868754.html

总结

以上是生活随笔为你收集整理的10.4 再探迭代器-插入/IO/反向的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。