草庐IT

ITERATOR

全部标签

c++ - Clang 无法在模板类特化中编译模板函数,该函数具有来自模板声明的*不同的返回类型*

以下函数derefItemX()在GCC4.8-5.3上编译正常,但在CLang3.8上编译失败://!AccessoryOperations-templateargumentdependedwrapperstemplate//ForNodes/non-scopedstoragestructOperations{//!\briefDefererencewrappedordirectiterator//!//!\paramielIItemXT&-iteratortobedereferenced//!\returnItemT&-resultingreferencetemplateconst

采用 STL 样式迭代器的 C++ 虚方法

我想要一个接口(interface)ModelGenerator,它有一个方法generate(),它接受一个可迭代的证据列表并创建一个模型。使用STLpseudo-duck-typing迭代器习惯用法...templateclassModelGenerator{public:templatevirtualboolgenerate(Iteratorbegin,Iteratorend,Model&model)=0;};但是虚函数不能模板化。所以我必须为整个类(class)制作模板:templateclassModelGenerator{public:virtualboolgenerate

python - C++ 中的递归生成器

我有一个大小为N的vector,其中每个元素i的值可以从0到possible_values[i]-1。我想做一个函数来遍历所有这些值。我能够使用递归生成器在Python中做到这一点:defall_values(size,values,pos=0):ifpos==size:yield[]else:forvinxrange(values[pos]):forv2inall_values(size,values,pos+1):v2.insert(0,v)yieldv2possible_values=[3,2,2]forvinall_values(3,possible_values):print

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++ - 如何访问第二个 map 迭代器?

我们是两个学生,我们现在有一个我们无法解决的史诗般的大问题。我们向老师求助,但他帮不了我们,所以我们最后的机会就是这个论坛!我们正在做一个项目:NPI文件的命令解释器。map::iteratortrouve=interpreteur.myMap.find(saisie);if(trouve==interpreteur.myMap.end())cerr*second)();我们必须使用名为“map”的对象,但我们无法获取第二个参数,名为..“Second”。为什么?代码块告诉我们错误在“else”中,这是错误:'second'wasnotdeclaredinthisscope.我们也试过

c++ - GCC 4.9 和 clang 3.5 中的 std::rbegin 和 std::rend 函数

我一直在MSVC2013中使用std::rbegin和std::rend。当我尝试使用GCC4.9.1或clang3.5.0编译我的代码时,两者都告诉我“rbegin”和“rend”是不是命名空间“std”的一部分。请参阅下面的代码示例。我是在做错什么,还是只是尚未在GCC和clang中实现?//test.cpp#include#include#includeintmain(int,char**){std::vectortest={1,2,3,4,5};for(autoit=std::rbegin(test);it!=std::rend(test);++it){std::cout海湾合

c++ - 带有移动迭代器的独特算法

是否允许使用std::unique通过std::make_move_iterator创建的迭代器功能?我试过thefollowing,并获得成功:#include#include#include#include#include#include#includestructA{A():i(std::numeric_limits::quiet_NaN()){std::cout::quiet_NaN();}A&operator=(Aconst&a){std::cout::quiet_NaN();return*this;}booloperatorv{1.0,1.0,2.0,2.0,2.0,3.0

c++ - 在 C++ 中建模任意树(使用迭代器)

我正在寻找一种方法来为每个节点具有任意数量子节点的树建模。这个答案建议使用BoostGraphLibrary来完成这个任务:What'sagoodandstableC++treeimplementation?我需要执行的主要操作是树及其子树的遍历函数(前序、子树、叶子)。我还需要从child向上收集数据的功能。BGL是正确的选择吗?如何实现简单树的先序遍历?在文档中,我只能找到有关常规图表的信息。编辑:我也知道tree.hh库,但它的许可证似乎并不适合所有人。 最佳答案 我已经对这棵树进行了改进。顶点和边迭代器现在都包含在外观中。如

c++ - 排列值顺序的迭代器

我有一个简单的排列结构:structPermutation{vectoritems;//["val_0","val_1","val_2","val_3","val_4"]vectorpermutationValue;//Let'ssayvalueis[4,2,0,1,3]}我希望能够像那样在范围循环中使用它for(stringitem:permutation){{cout最终预期输出应该是:val_4val_2val_0val_1val_3我应该在Permutation类中实现什么方法来实现它? 最佳答案 您需要做一些工作。您需要实

c++ - 如何正确使用enable_if?

我需要学习如何使用enable_if。为此,我需要使用enable_if重新实现距离函数。我试过这个:#include#include#include#include#includetemplatetypenamestd::enable_if::value,std::iterator_traits::difference_type>::typemy_distance(Inbegin,Inend,std::input_iterator_tagdummy){typenamestd::iterator_traits::difference_typen=0;while(begin!=end){