草庐IT

transform_iterator

全部标签

c++ - 'auto' 关键字如何知道何时使用 const_iterator 匹配函数重载?

我了解thisquestion的内容但是当使用函数重载时,事情是如何工作的呢?例如在std::map中定义了以下方法:iteratorfind(constkey_type&k);const_iteratorfind(constkey_type&k)const;如何使用auto关键字来选择一个或另一个?以下内容对我来说似乎不正确:autoi=mymap.find(key);//callsthenon-constmethod?constautoi=mymap.find(key);//callstheconstmethod? 最佳答案 s

c++ - iterator_traits中的嵌套指针类型有什么用?

std::iterator_traits类模板定义了5个嵌套类型:iterator_category,value_type,difference_type,pointer和reference.浏览的来源libc++和libstdc++的头文件,可以看到value_type的许多用途,difference_type和iterator_category,但只有一个reference(在std::iter_swap内)并且pointer没有.我的应用程序使用手工构建的代理迭代器/代理引用对。我想过渡到使用Boostiterator_facade这让我可以从默认的T&配置引用类型到任意类型,但

C++/STL:std::transform 给定步幅?

我有一个包含Nd数据的一维数组,我想用std::transform或std::for_each有效地遍历它。unignedintnelems;unsignedintstride=3;//wearegoingtohave3Dpointsfloat*pP;//thiswillkeepxyzxyzxyz...Load(pP);std::transform(pP,pP+nelems,strMover(pP,stride));//HowtodefinethestrMover?? 最佳答案 答案不是改变strMover,而是改变你的迭代器。定义

c++ - OSG : Get transform matrix from a node

首先,我必须为我的英语道歉。我正在开发一个应用程序,我们必须在每个时刻知道每个节点的属性(位置、旋转...),所以我考虑从场景图中获取每个节点的变换矩阵。我遇到的问题是我不知道该怎么做。例如,如果我有这样的东西:osg::ref_ptrroot=osgDB::readNodeFile("cessna.osg.15,20,25.trans.180,90,360.rot.2,3,4.scale");我想从名为root的Node对象中获取变换矩阵。我发现了类似的东西:osg::Matrixmat=osg::computeWorldToLocal(this->getNodePath());st

c++ - 调整自定义迭代器以便(a?)reverse_iterator 可以翻转它的输出

最近,用户@MooingDuck设计了concatenated_range,一个优雅的自定义迭代器,解决了“链接”两个迭代器的问题,一切都在幕后。它非常适合预期用途:autorange0=concatenate_ranges(x,x+i-1,x+i,x+a5+1);a6=foo(range0.first,range0.second);现在,我想通过执行(示例#2)来调整它:autorange0=concatenate_ranges(x+a5+1,x+i-1,x+i+1,x+n);a6=foo(std::reverse_iterator(range0.second),std::rever

c++ - 什么时候应该使用 const_iterator 而不是 auto

下面是一个例子,我认为它说明了使用const_iterator比使用“constauto”更可取的情况。这是因为容器不提供cfind()函数。还有其他选择吗?或者应该使用“constauto”而忽略const的缺失?std::stringGetJobTitle(conststd::string&employee){usingEmployeeTitles=std::unordered_map;EmployeeTitlesemployees={{"Alice","Director"},{"Bob","Manager"},{"Charlie","Developer"}};//Option1.

c++ - 为什么我不能直接将 to_lower_copy 传递给 transform 而不是将其包装在 lambda 中?

我正在尝试使用boost::to_lower_copy和std::transform来小写一堆字符串。如下,变体1,使用lamdba工作;变体2还可以证明这是编译器选择的正确模板重载。但是lambda很傻——它所做的只是将单个参数转发给boost::to_lower_copy。但是变体3,直接使用函数模板不会编译,即使我实例化它。我错过了什么?我有clang版本3.3(tags/RELEASE_33/rc3),使用libstdc++-4.8.1-1.fc19.i686和boost-1.53​​.0-14.fc19.i686。vectorstrings={"Foo","Bar"};vec

c++ - 如果我们不想将每个元素转换为一个转换元素,而是两个,我们如何使用 std::transform?

如果我们不想将每个元素转换为一个转换元素,而是两个,我们如何使用std::transform?下面的伪代码说明了我想要实现的目标std::transform(a.cbegin(),a.cend(),std::back_inserter(b),[](Tconst&x){returnf(x)andg(x);});当然,我可以调用std::transform两次,但这会很烦人。也许我们需要提供一个自定义的插入器。还有其他选择吗? 最佳答案 transform仅用于进行一对一的转换。自定义插入器无论如何也帮不了你,因为transform是这

c++ - move_iterator 对于返回纯右值的迭代器被破坏并返回悬空引用

我查看了std::move_iterator的STL源代码并发现它返回Iterator::value_type&&.当Iterator::reference时,这会导致不正确的行为是右值,与Iterator::value_type&不同.我有一个带有代理对象的类reference(如std::vector),它可以隐式转换为value_type.普通迭代器只是取消对这个代理的引用(输入迭代器要求允许这样做),但是std::move_iterator调用转换为value_type带有开销,然后返回对创建的临时对象的悬空引用。std::move_iterator仍然适用于std::vect

c++ - 使用 std::transform 制作一对 vector

我想从一对vector开始创建一个vector对。例如,如果A是std::vectorA=[101]并且B是std::vectorB=[010],我想要一个结构std::vectorC=[10,01,10]其中C_i=std::pair(A_i,B_i).我会避免for循环遍历两个vector,所以我正在寻找像std::transform()这样的几行代码。我尝试了以下代码:std::vectorboolPredLabel(tsLabels.size());std::vectorboolRealLabel(tsLabels.size());std::vector>TrPrPair(ts