C++PrimerPlus(第6版)中文版:Chapter16.4泛型编程

编程入门 行业动态 更新时间:2024-10-12 08:26:48

C++PrimerPlus(第6版)<a href=https://www.elefans.com/category/jswz/34/1765209.html style=中文版:Chapter16.4泛型编程"/>

C++PrimerPlus(第6版)中文版:Chapter16.4泛型编程

上一个例子是copyit.cpp。本博文主要是讲另外三种迭代back_insert_iterator,front_insert_iterator,和insert_iterator。这三种迭代器也将提高STL算法的通用性。很多STL函数都和copy()是类似的,将结果发送到输出迭代器的指示的位置。

下面这段语句:

copy(casts,casts,dice.begin())

这些值将覆盖dice中以前的内容,且该函数假设dice有足够的空间,能容纳这些值。也即是说copy()不能自动根据发送值来调解目标容器的长度。如果预先并不知道dice 的长度,或者想将元素添加到dice中,而不是覆盖已有的内容,该怎么做呢?

答案就是用这三种迭代器:back_insert_iterator,front_insert_iterator,和insert_iterator。插入将添加心的元素,而不会覆盖原来的元素,并使用自动内存分配来确保能够容纳新的信息。back_insert_iterator将元素插入到容器的尾部,front_insert_iterator将元素插入到容器的前端。最后,insert_iterator将可以用一个参数来指出插入的位置。

这些迭代器将容器类型作为模版参数,将实际的容器标识符作为构造函数的参数。要为名为dice的vector<int> 容器创建一个back_insert_iterator,可以这样写:

back_insert_iterator<vector<int>> back_iter(dice);

声明front_insert_iterator的方式与此相同。

对于insert_iterator,还需要额外指出插入的位置:

insert_iterator<vector<int>> inset_iter(dice,dice.begin());

下面的例子演示了迭代器的用法,还有使用for_each() 而不是ostream迭代器进行输出。

// Example16.11inserts.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include <string>
#include <iterator>
#include <vector>
#include <algorithm>
void output(const std::string& s) { std::cout << s << "  "; }int main()
{// std::cout << "Hello World!\n";using namespace std;string s1[4] = { "fine","fish","fashion","fate" };string s2[2] = { "busy","bats"};string s3[2] = { "silly","singers" };vector <string> words(4);copy(s1,s1+4,words.begin());//该语句把s1 拷贝到了vector  words 中for_each(words.begin(),words.end(),output);cout << endl;//construct anonymous back_insert_iterator object 构建匿名insert back_insert_iterator对象copy(s2,s2+2,back_insert_iterator<vector<string>> (words));//该句会在words的末尾插入s2,// 此时输出为:fine  fish  fashion  fate  busy  batsfor_each(words.begin(), words.end(), output);cout << endl;//construct anonymous insert_iterator object 构建匿名insert_iterator对象copy(s3, s3 + 2, insert_iterator<vector<string>>(words,words.begin()));//该句会在words的开始处插入s3,
// 此时输出为:silly  singers  fine  fish  fashion  fate  busy  batsfor_each(words.begin(), words.end(), output);cout << endl;
}

运行结果:
 

fine  fish  fashion  fate
fine  fish  fashion  fate  busy  bats
silly  singers  fine  fish  fashion  fate  busy  bats

更多推荐

C++PrimerPlus(第6版)中文版:Chapter16.4泛型编程

本文发布于:2024-02-12 12:07:21,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1687728.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:中文版   PrimerPlus

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!