草庐IT

ITERATOR

全部标签

c++ - 自定义对象的 STL 集,每个包含一个 STL 集

希望从下面的代码中可以清楚地看出,我想要一组对象objectSet,每个对象都包含str1和str2。该集合以str1为键,不会添加objectSet中已有str1的任何新对象,但如果这个新对象具有不同的str2,我想跟踪我在str2Set中看到它的事实#include#include#include#include#include#includeusingnamespacestd;classObject{public:string_str1;string_str2;set_str2Set;booloperatorobjectSet;Objecto;o._str1="str1";o._

c++ - 自定义输入迭代器

我有一个自定义的只读数据结构,我需要横向移动。我想创建一个需要跳过某些值的自定义迭代器。一个简单但等效的例子如下。我有一个数字vector,我想遍历所有跳过的负值。通常我会做类似的事情:vectorv;for(vector::iteratorit=v.begin();it!=v.end();++it){if(*it>0){dosomething(*it);}}但是我想做这样的事情:vectorv;for(vector::my_iteratorit=v.my_begin();it!=v.my_end();++it){dosomething(*it);}实现这一目标的正确方法是什么?

c++ - 如何检查简单的 C++ 标准库迭代器是否可以被推进?

假设我有一个封装标准容器的类:classStash{listData;public:list::const_iteratorGetAccess()const{returnData.begin();}};这是强制用户以迭代器的形式读取数据的一种非常方便的方式。但是,除了将迭代器与container.end()进行比较之外,我找不到其他方法。所以,我想知道是否可以选择仅通过stdlib来完成,或者我必须自己编写迭代器类(例如,使用can_advance方法)。相关问题可能是thisone,但它会询问迭代器是否有效,而不是它是否可以前进。我找不到有关后者的任何信息。

c++ - VC++11 映射和多映射迭代器(重载)C2535

我正在玩新的VS2012,我可能对新的C++11有疑问。当我在项目设置中将平台工具集设置为VS2010(v100)时,这段代码完美运行。.h:typedefstd::multimapSizeMap;typedefstd::mapOffsetMap;private:inlinevoid_RemoveBlockL(SizeMap::iteratorsizeI);inlinevoid_RemoveBlockL(OffsetMap::iteratoroffsetI);.cpp:inlinevoidFoo::_RemoveBlockL(SizeMap::iteratorsizeI){//impe

c++ - begin() 如何知道要返回哪种返回类型(const 或 non-const)?

这非常有效:listl;list::const_iteratorit;it=l.begin();list::iteratorit2;it2=l.begin();我不明白list是怎么来的“知道”它必须返回iteratorbegin()版本或const_iteratorbegin()const一个。我正在尝试为我的容器(一个trie)实现迭代器,但我遇到了这个问题。难道C++不应该不按返回类型处理差异化(除非使用奇怪的技巧)?这是一些代码和我得到的编译器错误:我的Trie是一个模板化的trie,可以包含任何类型。我有一个Trie::iter非常量迭代器和一个Trie::const_ite

c++ - 迭代器可以在 C++ 中的 vector 之间共享吗?

在c++中,如果我有两个数组a[10]和b[10],我可以引入一个索引i可以用于两个数组指向第(i+1)个元素,a[i]和b[i]。迭代器是否也可以共享,或者我需要做类似的事情:vectora;vectorb;//assumebothareinitiatedandsamevector::iteratori;//assumeprogramknowi=10and*i=20invectoravector::iteratorj=b.begin();for(;j!=b.end();j++){if(*j==*i){break;}}然后我得到迭代器j,它指向相同的位置但在vectorb中?我可以简单

c++ - 测试两个迭代器是否来自同一个对象

给定两个相同类型的std::iterators,如何测试它们是否来自同一个对象(而不是类)?请注意,我不是在问如何比较它们的值。std::stringfoo="foo";std::stringbar="bar";std::string::iteratoriter1=foo.begin();std::string::iteratoriter2=bar.begin();if(iter1==iter2){...}以上应该并且确实失败了。我如何在运行时检查这个?查看源代码,我看到相关方法调用iterator::_Compat()这是一个void方法,它执行我想要的检查,但失败时它会发出调试断言

C++ - 插入 Vector - 在迭代器之后还是之前?

上下文是:未知大小的数据集,它不断迭代,但在初始化后插入最少(初始化速度不是问题)。插入vector后元素位置困惑:如果我们在vector为空时在vector.begin()处插入,它会在地址.begin()处创建一个元素。如果我们在vector不为空时在vector.begin()处插入,它会将.begin()处的现有元素向前移动一个,还是将新元素放在.begin()之后?类似地,如果在插入新元素之前遍历vector并匹配vector元素中的特定条件,如果我们插入如下:vector.insert(迭代器,new_element)它是在当前迭代元素之后还是之前插入元素?提前致谢。中号

c++ - 为什么我不能用 const_iterator 调用模板基类构造函数?

这个问题在这里已经有了答案:WhereandwhydoIhavetoputthe"template"and"typename"keywords?(8个答案)关闭8年前。由于某些原因,下面的代码给出了错误Symbol'TemplateBase'couldnotberesolved.:templateclassTemplateBase{TemplateBase(std::map::const_iteratoranIterator){}};classSubClass:publicTemplateBase{SubClass(std::map::const_iteratoranIterator)

c++ - 使用即时计算的临时值为 ForwardIterator 实现成员访问运算符->

我正在为一个适配器范围实现一个迭代器,它懒惰地评估原始范围上的某些东西。这意味着:取消引用迭代器应该取消引用底层迭代器并对结果应用一些操作,然后返回该操作的结果。Toperator*()const{returnsomeOperation(*original_iterator);}如何实现类似于此operator*的operator->?在查看其他迭代器的实现时,它们通常返回一个T*。但是我不能返回一个指针,因为“指向对象”是一个临时的、即时计算的。在这种情况下,通常的指导是什么?我可以简单地返回一个T吗?虽然我个人不需要这个运算符(我也可以使用(*i​​).m而不是i->m并且标准算法