草庐IT

iteration

全部标签

c++ - 使用带有 split_iterator 的分类器

关于boost字符串算法,我似乎遗漏了一些东西。我正在尝试将split_iterator与使用Clasifier作为拆分点一起使用。所以,例如,我希望能够做这样的事情:make_split_iterator(str,is_space);但是make_split_iterator需要一个Range和一个Finder。所以我需要的是找到一些序列来从分类器创建查找器。有谁知道如何做到这一点,或者甚至可能吗? 最佳答案 您可以使用token_finder,如make_split_iterator(str,token_finder(is_sp

c++ - istream_iterator cin 初始化等待输入

我有这个代码片段。istream_iterator对象仅被定义而未被使用,因此我预计它不会执行任何操作并且应用程序会立即完成。但是当我运行应用程序时,在我提供一些输入之前它不会完成。为什么?我在ArchLinux上编译它:gcc4.7.1,命令:g++-std=c++11filename.cpp#include#includeusingnamespacestd;intmain(intargc,char*argv[]){istream_iteratorinput(cin);return0;} 最佳答案 按照标准,24.6.1.1ist

c++ - 为什么 boost filter_iterator 有奇怪的 make_filter_iterator 函数?

在经历了一些痛苦之后,我设法拼凑了这个boostfilter_iterator的最小示例usingnamespacestd;std::functionstlfunc=[](uint32_tn){returnn%3==0;};intmain(){vectornumbers{11,22,33,44,55,66,77,3,6,9};autostart=boost::make_filter_iterator(stlfunc,numbers.begin(),numbers.end());autoend=boost::make_filter_iterator(stlfunc,numbers.end

c++ - map<T,T>::iterator 作为参数类型

我有一个带有私有(private)映射成员的模板类templateclassMyClass{public:MyClass(){}private:std::mapmyMap;}我想创建一个接受映射迭代器的私有(private)方法voidMyFunction(std::map::iterator&myIter){....}但是,这会出现编译错误:标识符“迭代器”。我不需要传递一个抽象迭代器,因为MyFunction知道它是一个映射迭代器(并且只会用作myMap的交互器)并且会这样对待它(访问和修改myIter->second)。将myIter->second传递给MyFunction是不

c++ - 计算 pi 的位数

我已经使用GMP库和C++编写了Gauss-Legendre算法的实现代码来计算pi的位数。它有正确的输出,但问题是我不知道输出在哪一点“变坏”,因为我必须在代码中指定精度。这是使用64位精度的输出:3.141592653589793238*35*,最后两位数字不正确。我的问题是,如果我想要pi的n位,b的精度是多少,算法的迭代次数是多少i需要吗?谢谢 最佳答案 Gauss-Legendre算法(又名AGM算法)要求全程精确。与牛顿法迭代不同,AGM迭代不能self纠正。因此,您从一开始就需要完全精确。此外,您还需要额外的保护数字。

c++ - "vector iterator + offset out of range"断言有用吗?

这个完美的程序在VisualStudio2013的Debug模式下失败:#include#include#includeusingnamespacestd;voidmain(){vectorv={3,1,4,1,5,9,2,6,5,3};for(autoiFrom=v.cbegin(),iTo=iFrom+5;iFrom!=v.cend();iFrom=iTo,iTo+=5)coutvectoriterator+offsetoutofrange断言失败。它失败是因为iTo>v.cend(),这在这里是无害的。调试器测试没有被取消引用的迭代器的值有什么意义?顺便说一句,我知道我可以将上面

c++ - 如何在不使用递归的情况下找到字符串的所有排列?

谁能帮我解决这个问题:这是一个查找任意长度字符串的所有排列的程序。需要相同的非递归形式。(最好是C语言实现)usingnamespacestd;stringswtch(stringtopermute,intx,inty){stringnewstring=topermute;newstring[x]=newstring[y];newstring[y]=topermute[x];//avoidstempvariablereturnnewstring;}voidpermute(stringtopermute,intplace){if(place==topermute.length()-1){

c++ - 每次迭代发送一个矩阵 : Matlab "engine.h" c++

这个问题是在解决了我在这个question中遇到的问题之后出现的.我有一个c++代码,可以处理来自相机的帧并为每个处理过的帧生成一个矩阵。我想将每个矩阵发送到matlab引擎,所以在执行结束时我已经存储了所有矩阵。我对如何做到这一点感到困惑,我在每次迭代中发送一​​个矩阵,但它一直在覆盖它,所以最后我只有一个。这是一个代码示例:矩阵.cpp#includehelper.hmxArray*mat;mat=mxCreateDoubleMatrix(13,13,mxREAL);memcpy(mxGetPr(mat),matrix.data,13*13*sizeof(double));engP

c++ - 自定义双向迭代器的 reverse_iterator 上的 for_each 需要 OutputIterator

我创建了一个简单的不可变双向迭代器:#include#include#include#include#includeclassmy_iterator:publicstd::iterator{intd_val;public:my_iterator():d_val(0){}my_iterator(intval):d_val(val){}my_iteratoroperator--(int){d_val--;returnmy_iterator(d_val+1);}my_iterator&operator--(){d_val--;return*this;}my_iteratoroperator+

c++ - Vector.erase(Iterator) 导致错误的内存访问

我正在尝试对存储在vector中的videoObjects进行Z-Index重新排序。计划是识别将要放在vector第一个位置的videoObject,将其删除,然后将其插入到第一个位置。不幸的是,erase()函数总是导致错误的内存访问。这是我的代码:测试应用.h:vectorvideoObjects;vector::iteratoritVid;测试应用.cpp://GetthevideoObjectwhichrelatestotheusereventfor(itVid=videoObjects.begin();itVid!=videoObjects.end();++itVid){i