例如,以下是可能的:std::sets;std::set::iteratorit=s.begin();我想知道相反的情况是否可能,比方说,std::set*pSet=it->**getContainer**();//somethinglikethis... 最佳答案 不,没有可移植的方法来做到这一点。迭代器甚至可能没有对容器的引用。例如,一个实现可以使用T*作为iterator两者都输入std::array和std::vector,因为两者都将其元素存储为数组。此外,迭代器比容器更通用,并不是所有的迭代器都指向容器(例如,有输入和输
我有一个std::deque,我想在指定的索引处插入一个元素(我知道std::list在这方面会更好)。deque::insert()函数采用迭代器来指定要插入的位置。给定一个索引,如何获得指向该位置的迭代器,以便我可以将该迭代器传递给insert()?例如:voidinsertThing(deque&things,Thingthing,size_tindex){deque::iteratorit=/*whatdoIdohere?*/things.insert(it,thing);}我确定这是一个非常基本的问题,对此我深表歉意。自从我使用STL以来已经有很长时间了,我在std::deq
inti;vectornames;strings="penny";names.push_back(s);i=find(names.begin(),names.end(),s);cout我正在尝试查找vector中元素的索引。iterators没问题,但我希望它是int。我该怎么做? 最佳答案 您可以使用std::distance为此。i=std::distance(names.begin(),std::find(names.begin(),names.end(),s));不过,您可能想要检查您的索引是否超出范围。if(i==name
是否在std::setinvalidateiterator中调用erase?正如我在最后一行的第5名以下所做的那样..?如果是,从集合中删除所有元素的更好方法是什么classclassA{public:classA(){};~classA(){};};structstructB{};typedefstd::setSETTYPE;typedefstd::mapMAPTYPE;int__cdeclwmain(intargc,wchar_t*pArgs[]){MAPTYPEmapObj;/*.....SomeOperationHere...*/for(MAPTYPE::iteratoritr
C++11算法std::is_sorted和std::is_sorted_until都需要ForwardIterator。然而,Boost.Range版本boost::is_sorted只需要与InputIterator相对应的SinglePassRange。特别是,它委托(delegate)给一个基于迭代器的实现,如下所示:templateinlineIteratoris_sorted_until(Iteratorfirst,Iteratorlast,Compc){if(first==last)returnlast;Iteratorit=first;++it;for(;it!=las
我有一个模板化的双向迭代器。我不想让它随机访问,因为it+=n操作不会是常数时间。但是,it2-it1操作是常数时间。我想为这个迭代器专门化std::distance()以便使用它的算法(例如std::vector::assign())可以利用有效的差异操作。如果迭代器是模板,我该怎么做?这是一个玩具示例:#include#include//templatebidirectionaliteratortemplateclassiter:publicstd::iterator{T*ptr;public:iter(T*ptr):ptr(ptr){}iter()=default;iter(co
我有属于某个类别的大量项目vector。structitem{intclass_id;//someotherdata...};相同的class_id可以在vector中出现多次,vector构造一次后按class_id排序。因此同一类的所有元素在vector中彼此相邻。我稍后必须处理每个类的项目,即。我更新了同一类的所有项目,但没有修改不同类的任何项目。由于我必须对所有项目执行此操作,并且代码可以简单地并行化,因此我想将MicrosoftPPL与Concurrency::parallel_for_each()结合使用。因此,我需要一个迭代器并想出了一个前向迭代器,它返回具有特定clas
标题说明了一切。给定一个迭代器结束,它可以在不调用未定义行为的情况下递增零吗?恰当的例子-如果索引超出范围,以下代码是否可以将迭代器返回到指定的索引-或者end?std::vector::iteratorClass::fromIndex(size_tindex){returnmember_vector.begin()+std::min(index,member_vector.size());}如果std::advance或std::next的行为不同,那也很有趣,但在这里我特别感兴趣的是运算符+。 最佳答案 这是一个定义明确的空操作
我有一个std::unordered_mapstd::unordered_mapmyMap;我想使用find获得一个const迭代器。在c++03中我会做std::unordered_map::const_iterator=myMap.find("SomeValue");在c++11中,我想使用auto来减少模板数量auto=myMap.find("SomeValue");这是const_iterator还是迭代器?编译器如何决定使用哪个?有没有办法强制它选择const? 最佳答案 如果myMap是一个非常量表达式,它将使用非常量迭
我知道自增/自减运算符的后缀版本通常会由编译器针对内置类型进行优化(即不会进行复制),但iterator是否属于这种情况是吗?它们本质上只是重载运算符,可以通过多种方式实现,但由于它们的行为是严格定义的,能否优化它们,如果可以,它们是否被任何/许多人优化编译器?#includevoidfoo(std::vector&v){for(std::vector::iteratori=v.begin();i!=v.end();i++){//willthisgetoptimisedbythecompiler?*i+=20;}} 最佳答案 在st