草庐IT

ITERATOR

全部标签

c++ - STL 中 next_permutation 的 Python 实现

next_permutation是一个C++函数,它按字典顺序给出字符串的下一个排列。有关其实现的详细信息可以从这篇非常棒的帖子中获得。http://wordaligned.org/articles/next-permutation有人知道Python中的类似实现吗?STL迭代器是否有直接的Python等价物? 最佳答案 itertools.permutations很近;最大的区别是它将所有项目视为唯一而不是比较它们。它也不会就地修改序列。在Python中实现std::next_permutation对您来说可能是一个很好的练习(在

c++ - 迭代器和模板

我正在尝试实现一个函数,允许用户输入某种类型的开始和结束迭代器,然后对数据执行一些操作。但是,该函数必须足够通用,它应该适用于多种类型的迭代器(例如std::vector::iterator、std::string::iterator、std::iterator等)。唯一的限制是迭代器必须至少为forward_iterator_tag。能力。我的函数原型(prototype)是这样的:templatestd::shared_ptrremove(std::iteratorkey_start,std::iteratorkey_end);但是,这限制了我专门使用forward_iterato

c++ - 使用迭代器打印出集合的每个成员

我正在尝试使用迭代器打印出集合中的每个成员。据我从其他stackoverflow答案中可以看出,我的格式正确。当我运行这段代码时,它正确地输出了myset的大小为3,但它只输出了ii一次。如果我用*iter取消注释该行,VisualStudio会抛出一个运行时异常,指出“map/set迭代器不可取消引用。知道为什么吗?intmain(){setmyset;myset.insert(5);myset.insert(6);myset.insert(7);set::iteratoriter;cout 最佳答案 你有一个额外的;在这一行:f

c++ - STL 迭代器 std::distance() 错误

我有这样两个类型定义:typedefstd::vectorContainer;typedefstd::vector::const_iteratorIter;在我考虑的问题中,我对ContainerInput进行了一些操作,然后我想计算std::distance(Input.begin(),itTarget),其中itTarget属于Iter类型。但是我得到了这个编译器错误noinstanceoffunctiontemplate"std::distance"matchestheargumentlist,并且仅在类型转换之后,即std::distance(static_cast(Input

c++ - 基于范围的对 <Iterator,Iterator>

我对以下答案有疑问:https://stackoverflow.com/a/15828866/2160256如那里所述,我们不能像这样在BGL中使用基于范围的for:for(autoe:boost::edges(g))//dosomethingwithe然而,here它指出,我们可以重载使用基于范围的语义所需的begin()和end()函数。所以我尝试了:templateIbegin(std::pair&p){returnp.first;}templateIend(std::pair&p){returnp.second;}但是,编译器仍然报错:error:nomatchingfunct

c++ - 是否应该使用范围 for 循环而不是 vector 上的迭代器?

给定一个vector,vc,可以迭代具有范围的vector:for(autoc:vc)std::cout或者使用迭代器:for(autoit=vc.cbegin();it!=vc.cend();++it)std::cout是否有使用一种方法而不是另一种方法的功能原因,或者这仅仅是风格问题? 最佳答案 从性能的角度来看,并没有真正的区别。正如BjarneStroustrup在他的《C++编程语言第4版》一书中所写:Thesimplestloopisarange-for-statement;itsimplygivestheprogram

c++ - 使用 istream_iterator 并从标准输入或文件中读取

我正在使用MicrosoftVisualC++编写程序,我希望我的程序使用istream_iterator从标准输入或文件中读取。谷歌搜索互联网并没有显示我认为它必须多么简单。因此,例如,我可以很容易地编写并从标准输入中读取:#include#include#includeusingnamespacestd;intmain(){istream_iteratormy_it(cin);for(;my_it!=istream_iterator();my_it++)printf("%s\n",(*my_it).c_str());}或者我可以写这个并从文件中读取:#include#include

c++ - 转换 shared_ptr 类型 vector 的迭代器

如何转换shared_ptr类型vector的迭代器?考虑以下示例:typedefboost::shared_ptrtype_myClass;vectorvect;vector::iteratoritr=vect.begin();while(itr!=vect.end()){//Followingstatementworks,butIwishtorathercastthis//toMyClassandthencallafunction?(*itr)->doSomething();} 最佳答案 您不想转换,而是提取对该对象的引用:My

c++ - c++ 迭代器有更漂亮的语法吗?

在C++中使用迭代器是否有更漂亮/更简洁的方法?从我看过的教程中,我要么在任何地方都设置了typedef(对于很多一次性for循环来说,这会变得乏味):typedefstd::vector>::iteratorBlahIterator;或者有冗长的寻找循环,如:for(std::vector>::iteratorit=...)...有没有更好的办法? 最佳答案 在C++11中,您可以结合使用基于范围的for循环和auto关键字:for(auto&it:v)... 关于c++-c++迭代器

c++ - 重载函数以获取 true_type 或 false_type 参数与使用 if 检查?

与使用一个if语句相比,重载方法/函数以采用true_type或false_type参数有什么好处吗?我看到越来越多的代码使用带有true_type和false_type参数的重载方法。使用if语句的简短示例voidcoutResult(boolmatch){if(match)cout与使用重载函数相比:voidcoutResult(true_type){cout 最佳答案 您的第二个示例代码无法编译,这是编译时重载解析和运行时条件分支之间“选择”哪个不同的症状要执行的代码。“重载函数以获取true_type或false_type参