草庐IT

ITERATOR

全部标签

c++ - Lambda 作为输出迭代器

我来自Java世界,对C++不太熟悉,所以出现了以下问题。我看到OutputIterator被广泛使用。到目前为止,我所看到的是人们使用插入器,例如std::back_inserter。是否不可能以某种方式提供为每个元素调用的lambda而不是将元素记录在容器中?示例:代替std::vectormy_vector;set_intersection(s1.begin(),s1.end(),s2.begin(),s2.end(),std::back_inserter(my_vector));有点像set_intersection(s1.begin(),s1.end(),s2.begin()

c++ - C++11标准中是否规定std::begin(Container&&)返回const_iterator?

这里是相关代码的链接:#include#include#include#includeintmain(){std::vectorv{1,2,3,4,5};autoiter=begin(std::move(v));if(std::is_const::type>::value)std::couthttp://coliru.stacked-crooked.com/a/253c6373befe8e50我遇到这种行为是因为declval()在decltype用std::begin表达.gcc和clang都返回迭代器,这些迭代器在取消引用时会产生const引用。这可能是有道理的,因为右值引用通常绑

c++ - 检查模板参数是否为 std::vector<T>::iterator

如何检查模板参数是否为std::vector::iterator?对于void类型,我们有std::is_void。std::vector::iterator有类似的东西吗?? 最佳答案 你可以为此创建一个特征:#include#include#includetemplatestructis_vector_iterator:std::is_same::iterator>{};templatestructis_vector_iterator(),std::enable_if_t::iterator>::value>())>:std::

c++ - 返回 C++ 迭代器

我有一个函数,如果找到一个对象,它会返回一个迭代器。现在我有一个问题。如何解决通知调用此函数的对象未找到该对象的问题?vector::iteratorFind(intid,inttest){vector::iteratorit;aClassclass;for(it=class.vecCont.begin();it!=class.vecCont.end();++it){if(foundobject)//currentlyinpsuedocodereturnit;}return????//我是否需要更改其中的数据结构?提前致谢!:) 最佳答案

c++ - 为什么 std::vector::insert 使插入点之后的所有迭代器失效

当insert插入到std::vector时,C++标准确保插入点之前的所有迭代器在容量期间保持有效code>没有用完(参见[23.2.4.3/1]或std::vectoriteratorinvalidation)。不允许插入点之后的迭代器保持有效的理由是什么(如果容量没有耗尽)?当然,它们随后会指向不同的元素,但是(根据std::vector的假定实现)应该仍然可以使用这样的迭代器(例如取消引用它或递增它)。 最佳答案 您似乎将“无效”迭代器视为唯一会在使用时引发崩溃的迭代器,但标准的定义更为广泛。它包括迭代器仍然可以安全地取消引

【JAVA】Iterator 和 ListIterator 有什么区别?

🍎个人博客:个人主页🏆个人专栏:   JAVA  ⛳️ 功不唐捐,玉汝于成目录前言 在Java中,遍历集合是日常编程中常见的任务,而Iterator和ListIterator作为遍历集合的两个主要接口,提供了不同的功能和灵活性。通过深入了解它们之间的差异,我们能够更好地选择适合特定需求的遍历方式,并充分利用它们的功能。正文在Java中,Iterator和ListIterator都是用于遍历集合元素的接口区别:适用范围:Iterator是最通用的迭代器接口,可以用于遍历任何实现了Iterable接口的集合,包括List、Set、Map等。ListIterator是Iterator的子接口,它扩展

c++ - 使用条件迭代器插入到 vector 中

假设我有一个包含各种条目的vector,我想将其插入到另一个vector中,同时忽略满足条件的条目。例如,我想插入一个vector,同时忽略所有三个vector。{1,3,2,3,4,5,3}->{/*previouscontent,*/1,2,4,5}到目前为止,我使用的是std::partition,它不保留相对顺序并重新排列源vector。std::vectorsource({1,3,2,3,4,5,3});std::vectortarget;autopartition=std::partition(std::begin(source),std::end(source),[](c

c++ - 查找 STL 迭代器的所有者

有什么方法可以找到迭代器指向的容器?具体来说,我希望能够找到特定std::vector::iterator指向的std::vector以便我可以检查范围,而无需实际传递对该vector的引用。如果(我怀疑)答案是否定的,为什么不呢?编辑:感谢您提供了一些快速且(大部分)准确的答案。EvanTeran钉它。我根本没有考虑优化,但现在很明显了。有几个人问我为什么要这样做。这没什么特别重要的。我有一个用vector和指向vector的迭代器初始化的对象。如果我可以只用迭代器初始化对象,那将是可爱和方便的,因为这样我就可以将vector::iterator直接转换为该对象(这听起来很奇怪,但在

c++ - 有条件地控制 for 循环方向的最佳方法是什么

我的代码中有一个block,其中for循环应根据条件向前或向后运行。if(forwards){for(unsignedx=0;x=0;x--){//Lotsofcode}}是否有一种很好的设置方法,这样我就不会在for循环中重复所有代码两次?有问题的“某物”是一个std::vector,所以也许它可以用一个迭代器?(我没有使用C++11) 最佳答案 将循环值与您在循环内使用的值分开:for(unsignedx2=0;x2 关于c++-有条件地控制for循环方向的最佳方法是什么,我们在St

c++ - 我可以获得指向当前迭代器值的指针吗

在我的类(class)中,我有两个私有(private)成员:std::listobjects;MyObject*selecteObj;当事件发生时,我想遍历列表并运行某种测试,该测试只会对列表中的一项产生true。我想保存指向该项目的指针以供在其他地方使用。std::list::iteratori;for(i=objects.begin();i!=objects.end();++i){if(i->test())selectedObj=i;}在其他地方用另一种方法if(selectedObj!=null)tmpObj->doSomething();但是这不起作用,因为i不是指针,它是一