C++学习笔记25——泛型算法之写入容器

原创 2015年11月21日 15:13:29

1,fill函数

template< class ForwardIt, class T >
void fill( ForwardIt first, ForwardIt last, const T& value );

效果:将[first, last)范围内的每个元素都设为value.


2,fill_n函数

template< class OutputIt, class Size, class T >
void fill_n( OutputIt first, Size count, const T& value );        // (until C++11)
template< class OutputIt, class Size, class T >
OutputIt fill_n( OutputIt first, Size count, const T& value );	  // (since C++11)
效果:从first开始将count个元素的值设为value.

返回值:C++ 11之前,返回void
                C++ 11之后,返回赋值的最后一个元素的下一个位置的迭代器,count为0时返回first

注意:fill_n总是假定容器足够大,可以放下count个元素。但前面已经提到,算法本身是不会改变容器大小的,所以fill_n函数不会为容器开辟空间。当容器不够大时会发生运行时错误。最常见的出错类型在一个刚定义的空容器上调用fill_n:
vector<int> ivec; //空容器
fill_n(ivec.begin(), 10, 0); // !!!Error!

3,copy函数

template< class InputIt, class OutputIt >
OutputIt copy( InputIt first, InputIt last, OutputIt d_first );
效果:将[first, last)之间的元素copy到从d_first开始的元素中去。

类似于容器操作assign(b, e)
应该同样需要小心目标容器的大小是否足够容纳要写入的元素。

4,插入迭代器(insert iterator)

插入迭代器:可以给基础容器添加元素的迭代器。
用迭代器给容器元素赋值时,被赋值的是迭代器所指向的元素。而使用插入迭代器时,则会在容器中添加一个新元素。

5,back_inserter函数

头文件:
#include<iterator>
template< class Container >
std::back_insert_iterator<Container> back_inserter( Container& c );

back_inserter is a convenience function template that constructs a std::back_insert_iterator for the container cwith the type deduced from the type of the argument.
back_inserter函数时迭代器适配器,其实参是一个容器的引用,返回一个绑定在该容器上的插入迭代器。
当用这个迭代器给元素赋值时,赋值运算将调用push_back()在容器中添加元素。

所以可以联合使用fill_n和back_inserter给空容器赋值:
vector<int> ivec; //空容器
fill_n(back_inserter(ivec), 10, 0); //OK.向ivec中追加10个元素

也可以将copy与back_inserter联合使用:
vector<int> ivec;
list<int> iList(10,1);
copy(ivec.begin(), ivec.end(), back_inserter(ivec));

6,replace函数

template< class ForwardIt, class T >
void replace( ForwardIt first, ForwardIt last,
              const T& old_value, const T& new_value );	
template< class ForwardIt, class UnaryPredicate, class T >
void replace_if( ForwardIt first, ForwardIt last,
                 UnaryPredicate p, const T& new_value );
谓词p的原型为: bool pred(const Type &a);
效果:将[first, last)范围内所有满足条件的元素替换为new_value
     无谓词的第一个版本,将范围内值为old_value的元素替换掉;
     有谓词的第二个版本,将范围内使谓词p返回true的元素替换掉。

7,replace_copy函数

template< class InputIt, class OutputIt, class T >
OutputIt replace_copy( InputIt first, InputIt last, OutputIt d_first,
                       const T& old_value, const T& new_value );
	
template< class InputIt, class OutputIt, class UnaryPredicate, class T >
OutputIt replace_copy_if( InputIt first, InputIt last, OutputIt d_first,
                          UnaryPredicate p, const T& new_value );
谓词p的原型为: bool pred(const Type &a);
效果:与replace类似,只是不改变原来的序列,将替换后的序列到存到从d_first开始的容器中。


版权声明:本文为博主原创文章,未经博主允许不得转载。

机器学习(六) - - 模型评估和选择①经验误差与过拟合

模型评估和选择(一) 经验误差和过拟合
  • zmdsjtu
  • zmdsjtu
  • 2016年09月29日 12:32
  • 1768

七月算法机器学习笔记1--机器学习中的数学之数理统计和参数估计

数理统计和参数估计 首先,看一下概率与统计的关注点 概率论问问题的方式: 已知总体的可能性,求某种事件发生的概率,如图所示:...
  • thystar
  • thystar
  • 2016年04月25日 18:06
  • 1532

大牛的《深度学习》笔记,Deep Learning速成教程

雷锋网(搜索“雷锋网”公众号关注)按:本文由Zouxy责编,全面介绍了深度学习的发展历史及其在各个领域的应用,并解释了深度学习的基本思想,深度与浅度学习的区别和深度学习与神经网络之间的关系。 深度学...
  • huangtingting1
  • huangtingting1
  • 2016年08月23日 00:05
  • 5877

C++学习笔记26——泛型算法之容器元素排序(sort unique)

1,sort函数 template void sort( RandomIt first, RandomIt last ); template void sort( RandomIt first, ...
  • yellowston
  • yellowston
  • 2015年11月21日 16:47
  • 270

C++学习笔记(十六):对vector进行更多的操作——泛型算法

先强调一下,这里的泛型算法实际不光光是对vector的操作,对于“顺序容器”均可以。 但是什么是顺序容器: 我们都知道,容器就是一些特定类型对象的集合。而顺序容器为程序员提供了控制元素存储和访问的...
  • autocyz
  • autocyz
  • 2015年04月23日 14:45
  • 1452

C++ Primer学习笔记——$11 泛型算法

  • 2009年04月26日 12:47
  • 118KB
  • 下载

GeekBand c++學習筆記之八(泛型算法)

泛型算法總共把它分為四個部分,分別是:1.非變異算法2.變異算法3.排序4.泛型數值算法 因為這些都是算法,而算法是無窮盡的,因為算法是依照你的需求就可以造出你所要的計算方式,所以沒有辦法做大的講解,...
  • ak47skyang
  • ak47skyang
  • 2016年06月24日 21:02
  • 79

C++ Primer 学习笔记:泛型算法入门 特定容器算法

与其他的容器不一样,链表类型的list和forward_list定义了几个成员函数形式的算法,这些函数和前面的所总结的通用算法不同,对于list来说,最好使用自己的特有算法,下面介绍一下主要的几个算法...
  • JackZhang_123
  • JackZhang_123
  • 2018年01月02日 12:21
  • 27

【C++ Primer 学习笔记】: 容器和算法之【泛型算法】

本系列博客主要是在学习 C++ Primer 时的一些总结和笔记。 【C++ Primer 学习笔记】: 容器和算法之【泛型算法】 本文地址:http://blog.csdn.net/shanglia...
  • shanglianlm
  • shanglianlm
  • 2015年11月25日 17:05
  • 388

C++ Primer学习笔记——$11 泛型算法

题记:本系列学习笔记(C++ Primer学习笔记)主要目的是讨论一些容易被大家忽略或者容易形成错误认识的内容。只适合于有了一定的C++基础的读者(至少学完一本C++教程)。  作者: tyc611,...
  • whycold
  • whycold
  • 2011年01月19日 15:06
  • 548
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++学习笔记25——泛型算法之写入容器
举报原因:
原因补充:

(最多只允许输入30个字)