草庐IT

c++ - std::vector 构造函数采用一对迭代器

我正在制作某种容器,我想模仿std::vector的界面.但是,我很难理解如何theconstructoroverload(4)作品。问题是它通常与重载(2)冲突。//(2)vector(size_typecount,constT&value,constAllocator&alloc=Allocator());//(4)templatevector(InputItfirst,InputItlast,constAllocator&alloc=Allocator());根据cppreference,C++11之前:thisconstructorhasthesameeffectasoverl

c++ - 迭代器与引用与指针

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我有一个生成任意数量的工作对象的类,这些工作对象将它们的结果计算到std::vector中。.我将在某些时候删除一些worker对象,但我想将它们的结果保持在特​​定的顺序中,只有spawned的类知道。他们。因此,我为A类中的输出提供了vector。我有(IMO)三个选项:我可以将指向vector、引用或迭代器的指针作为成员。虽然迭代器选项有某些缺点(迭代器可以递增。)我不确定指针或引用

c++ - 在哪里可以获取 C++ 中为我自己的容器创建迭代器的示例代码?

我一直在寻找为我自己的容器创建迭代器的示例代码,但我还没有真正找到一个好的示例。我知道之前有人问过这个问题(CreatingmyownIterators),但没有看到任何令人满意的示例答案。我正在寻找简单的示例代码来开始设计我自己的迭代器。谢谢 最佳答案 Here你可以找到创建自定义迭代器的好介绍。也看看Boost.Iterator图书馆。 关于c++-在哪里可以获取C++中为我自己的容器创建迭代器的示例代码?,我们在StackOverflow上找到一个类似的问题:

c++ - 将 std::pair 迭代器转换为 boost::iterator_range

我有一个std::multimap,我想从equal_range创建一个boost::iterator_range。我在文档中找不到简单的方法,所以我尝试了以下方法:typedefstd::multimapMap;Mapmap;...boost::iterator_ranger(map.equal_range(2));令人惊讶的是,它有效(使用GCC4.1.2)。我很好奇它是如何工作的。我发现iterator_range构造函数没有重载可以执行此操作,并且multimap::iterator_range显然没有可以返回Boost范围的重载。 最佳答案

c++ - 迭代器和引用计数字符串

如果我们考虑使用引用计数的std::string实现,请考虑以下场景:intmain(){stringenglish="Hello";stringgerman=english;//refcnt=2stringgerman2=german;/*L1*/german[1]='a';/*L2*/*(german2.begin()+1)='A';coutL1和L2中发生了什么?引用计数是否被破坏并执行了深拷贝?我想是的,但我担心的是如果发生这种情况,做一个简单的:cout或者一个简单的:cout在非常量上下文中会执行不必​​要的深拷贝。我对吗?实现如何处理这个细节?

c++ - 将空范围传递给采用一对迭代器的函数的简洁方法是什么?

我有一个接受一对迭代器的函数。我想提供一个无参数版本的函数,它的行为就像传递了一个空范围一样。具体来说,假设第一个函数是:voidf(vector::iteratorb,vector::iteratore){//impl.}我想这样写:voidf(){f({},{});}我这里的初始化是否正确,{}、{}应该是两个默认构造的vector::iterator类型?(编译)。我是否必须构造一个容器来获得一对比较相等的迭代器? 最佳答案 据我所知,这通常不能以符合标准的方式完成。24.2.1/5:Iteratorscanalsohaves

c++ - 从仅包含其迭代器的列表中删除元素

如果您只有指向要删除的元素的迭代器,是否可以从std::list中删除元素?我有大量使用迭代器来列出元素的函数,如果必须将拥有的list传递给它们中的每一个元素,将会带来巨大的不便。 最佳答案 编辑:您不能使用单个迭代器。如果你有开始/结束迭代器,你可以使用std::remove算法将所有要删除的元素移动到末尾,并在稍后删除它们。如果您不这样做,或者以上内容对于您当前的设计不可行,我建议您更改您的功能以采用std::pair,std::list::iterator>或类似的东西。 关于c

c++ - 自定义容器迭代器是否保证 ADL 考虑命名空间标准?

我无意在实际代码中使用它。我保证。标准是否保证std当函数参数的类型为container::iterator时,将找到命名空间和container::iterator不是typedef对于内置类型?例如#include#includeintmain(){std::sets;find(s.begin(),s.end(),0);//doIhaveaguaranteethatstd::findwillbefound?}换句话说,迭代器类可以定义在std这样的命名空间中吗?不会被ADL考虑?提前致谢。 最佳答案 我相信在大多数情况下,答案是

c++ - 类型删除的 C++ 输出迭代器

如何从std::insert_iterator和std::back_insert_iterator输出迭代器中删除类型?是否可以使用boostany_iterator来做到这一点?#include#include#includetypedefboost::range_detail::any_iteratorIt;intmain(){std::vectorv;ItoutIt(v.begin());//compilesItinserter(std::back_inserter(v));//doesnotcompilereturn0;} 最佳答案

C++ STL,常量迭代器,find()

我目前正在学习STL,我对find和const迭代器有一些不确定性。假设我有一个查找功能:some_stl_container::const_iteratorfound=myContainer.find(value);在那之后,我应该检查我为found得到的是另一个const_iterator还是它对简单的迭代器进行检查有效。这样做基本上会有什么区别:if(found!=myContainer.cend())还有这个:if(found!=myContainer.end())第一个看起来更准确(至少对我而言),但第二个应该也能正常工作,对吧? 最佳答案