c++ 使用算法时确保目标区间足够大

/*************************************************************************
 *
 *   无论何时,如果使用的算法需要指定一个目标区间,要么必须确保区间足够大
 *   要么确保它会随着算法的运行而增大。
 *   要在算法执行过程中增大目标区间,请使用插入型的迭代器,如ostream_stream,
 *   back_inserter,front_inserter,inserter 返回的迭代器。
 *
 ************************************************************************/

#include<iostream>
#include<vector>
#include<algorithm>  //for_each,transform
#include<iterator>   //istream_iterator,back_inserter
using namespace std;

int opIncrement(int val){ return ++val;}

int main()
{

    vector<int> iVecValues(10,1); //10个1
    vector<int> iVecResult;

    cout<<&(*iVecResult.end())<<","<<iVecResult.size()<<endl;
    transform(iVecValues.begin(),iVecValues.end(),
            back_inserter(iVecResult),opIncrement);  //插入型迭代器

    for_each(iVecResult.begin(),iVecResult.end(),
            [](int i){cout << i << ",";});
    cout << endl;

    cout<<&(*iVecResult.end())<<","<< iVecResult.size()<<endl;

    return 0;
}
时间: 2024-11-08 20:21:57

c++ 使用算法时确保目标区间足够大的相关文章

《条目三十:确保目标区间足够大》

<条目三十:确保目标区间足够大> 在使用STL中的算法时,确保目标区间足够大,这个大应该怎么理解? 在我看来就是,容器,在初始化时使用reserve()强制设定容器的容量,和在目标容器比源容器size()元素个数更小时,在使用的时候,如果是直接对目标容器操作,会由于目标容器与源容器大小不匹配的问题,从而报错. 例如: int transmogrify(int x); vector src; for(int i = 0; i < 10; ++i) { src.push_back(i); }

【error 2625】实现STL的copy算法时出现的问题

在实现set_union算法时调用了自己写的copy算法,出现了以下问题. Error 1 error C2665: 'xyz_stl::__copy' : none of the 2 overloads could convert all the argument types 即“__copy的2个重载不能转换所有的参数类型”. 注:__copy是照着STL源码剖析进行命名的(实际上我倒很不喜欢SGI的那么长的命名),是针对输入迭代器(InputIterator)的迭代器类型(iterator

用Camshift算法对指定目标进行跟踪

原理 Camshift算法是Continuously Adaptive Mean Shift algorithm的简称.它是一个基于MeanSift的改进算法.它首次由Gary R.Bradski等人提出和应用在人脸的跟踪上,并取得了不错的效果.由于它是利用颜色的概率信息进行的跟踪,使得它的运行效率比较高. Camshift算法的过程由下面步骤组成: (1)确定初始目标及其区域: (2)计算出目标的色度(Hue)分量的直方图: (3)利用直方图计算输入图像的反向投影图(后面做进一步的解释): (

解决卸载时残留目标文件夹的问题

原文:解决卸载时残留目标文件夹的问题 上一篇: IS2009制作Oracle 静默安装包(二) 感谢空白先生特许授权 在 uninstalled函数最后加DeleteProgramFolder ( TARGETDIR ) 下一篇: Installshield设置feature为必须选中状态,即必定安装状态解决卸载时残留目标文件夹的问题

普林斯顿公开课 算法3-2:求第k大的数

问题 给定N个元素的数组,求第k大的数. 特例 当k=0时,就是求最大值,当k=N-1时,就是求最小值. 应用 顺序统计 求top N排行榜 基本思想 使用快速排序方法中的分区思想,使得a[k]左侧没有更小的数,右侧没有更大的数 性能 快速选择算法的复杂度是N. 最坏情况下的复杂度是1/2N^2,但是可以通过预先洗牌来防止出现最坏情况 代码 public class QuickSort { // 对区间 [start, end) 进行分区 public static int partition(

转发---十大编程算法助程序员走上大神之路

十大编程算法助程序员走上大神之路 本文为转发,源地址:http://linux.cn/article-3613-1.html 算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来. 快速排序使用分治法(Divide and co

十大编程算法助程序员走上大神路

算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来. 快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists). 算法步骤: 1 从数列中挑出一个元素,称为 "

poj2104 划分树 区间K大 在线 无修改

博主sbit....对于高级数据结构深感无力,然后这些东西在OI竟然烂大街了,不搞就整个人都不好了呢. 于是我勇猛的跳进了这个大坑 ——sbit 区间K大的裸题,在线,无修改. 可以用归并树(\(O(nlog^3n)\)),也可用划分树(\(O(nlogn + mlogn)\)).果断划分树...(以后再来看归并树...再来看...来看..看..) 划分树是个什么东西呢?为什么可以做区间k大呢? 想想平衡树做k大时是如何搞的,其实内在原理是一样的. 划分树分两个步骤:建树与询问,这两个步骤相互关

BZOJ 1901: Zju2112 Dynamic Rankings 区间k大 带修改 在线 线段树套平衡树

之前写线段树套splay数组版..写了6.2k..然后弃疗了.现在发现还是很水的..嘎嘎.. zju过不了,超时. upd:才发现zju是多组数据..TLE一版才发现.然后改了,MLE...手写内存池..尼玛终于过了..附zju2112代码于后. bzoj倒是过了,1A的感觉还是很爽的..可是时间不好看..这就是所谓\(O(nlog^3n)\)的复杂度的可怜之处么? 写挂的地方: insert一定要是传地址指针进去. delete时先把地址指针delete掉,最后把是地址指针指向左儿子or右儿子