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开始的容器中。


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

相关文章推荐

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

1,sort函数 template void sort( RandomIt first, RandomIt last ); template void sort( RandomIt first, ...

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

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

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

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

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

题记:本系列学习笔记(C++ Primer学习笔记)主要目的是讨论一些容易被大家忽略或者容易形成错误认识的内容。只适合于有了一定的C++基础的读者(至少学完一本C++教程)。  作者: tyc611,...
  • whycold
  • whycold
  • 2011年01月19日 15:06
  • 514

《c++ primer》学习笔记——泛型算法01

头文件: #include #include 算法: 0、back_inserter template back_insert_iterator back_inserter...

《C++ Primer》第10章:泛型算法 学习笔记总结

概述 大多数算法定义在#include或者#include中。迭代器算法不能依赖于容器,泛型算法本身不会执行容器的操作,它们只会运行于迭代器之上,执行迭代器的操作,结果:算法永远不能改变底层容器的大小...

C++学习笔记---容器和算法

1、顺序容器: vector、deque(双向队列)、list1)各顺序容器特点: vector和deque容器提供了对元素的快速访问,但付出的代价是,在容器的任意位置插入或删除元素,比在容器尾部...
  • hhq163
  • hhq163
  • 2015年10月30日 14:13
  • 373

C++学习笔记53——纯虚函数与继承中的容器

1,纯虚函数 (1)定义方式:在虚函数的形参表后用“=0”声明,例如: class Base4 { public: Base4(int ii, int jj) :i(ii), j(jj) { c...

C++学习笔记22——关联容器之map

1,关联容器综述 关联容器和顺序容器的本质区别在于: 关联容器通过键(key)来存储和读取元素,而顺序容器则通过元素在容器中的位置顺序存储和访问元素。 可能正是因为其不是通过位置来存储的,所以关联...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++学习笔记25——泛型算法之写入容器
举报原因:
原因补充:

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