草庐IT

ITERATOR

全部标签

c++ - 这个 C++ 模板中的迭代器类型应该是什么?

在前一段时间处理一些图形代码时,我使用int作为底层坐标持有者编写了Rect和Region类,并且效果很好。Region是作为STL列表的简单类扩展实现的,并且只包含一个Rect列表。现在我还需要使用double作为基础坐标持有者的相同类型的类,并决定尝试将其模板化。所以我基本上以智能方式将“int”替换为“typenameT”并解决了问题。但是还有一个问题让我很困惑。我想通过对构成它的所有Rect进行并集来计算区域的边界框。这在未模板化时工作正常,但在模板化时g++在列表迭代器上阻塞。相关代码如下://Rectclassthatalwaysremainsnormalizedtempl

C++ 和迭代器失效

所以我正在学习AcceleratedC++并且对C++中的迭代器失效有点不确定。也许问题在于从未解释过这些迭代器的构造方式。举个例子:带有{1,2,3}的vector如果我的迭代器在{2}上并且我在{2}上调用删除,我的迭代器无效。为什么?在我的脑海中,{3}被向下移动,因此{2}所在的内存位置因此迭代器仍指向有效元素。我认为这是不正确的唯一方法是,如果迭代器是预先为每个元素创建的,并且每个迭代器都有某种类型的字段,其中包含该容器中后续元素的地址。我的另一个问题与诸如“使所有其他迭代器无效”之类的语句有关。嗯,当我循环遍历vector容器时,我使用的是一个迭代器。vector中的所有这

c++ - AnyIterator 和 boost 迭代器外观

是否可以使用boost迭代器外观实现任意迭代器?我不想在我的基类中定义实现细节classBase{public:typedefstd::vector::iteratoriterator;//implementationdetail...virtualiteratorbegin()=0;virtualiteratorend()=0;};还是我必须完全从头开始写一个; 最佳答案 您发布的代码修复了从Base返回的迭代器类型及其对std::vector::iterator的所有实现这可能不是你想要的。Jeremiah的建议是解决一个缺点的

c++ - 我怎么知道我的迭代器是否递减超过了我的 vector 的开头?

我正在通过一个vector来回移动一个iterator。我可以像这样检查迭代器是否结束:++my_iterator;if(my_iterator==my_vector.end()){--my_iterator;//ifIwanttostoptheiteratorattheend.my_iterator=my_vector.begin();//ifIwanttheiteratortowraparound.}但是我如何检查它是否从一开始就跑完了呢?编辑:那我可以这样做吗?--my_iterator;if(my_iterator==my_vector.rend()){my_iterator=

c++ - 使用 std::list 作为循环列表是否安全?

所以标准中定义了递增或递减end()迭代器?在Linux上,begin()被实现为end()++。#include#includeintmain(){std::listnumbers;for(inti=0;i所以每个平台上的输出总是一样的?输出:012345678901234567890123456789 最佳答案 递增从end()返回的迭代器任何标准C++库容器都会导致未定义的行为。由于std::list的大多数实现通用的实现细节它可能会增加list.end()但不能保证它确实如此。

c++ - 通过变量名遍历结构

更新:6个月后,我刚刚看到这个答案:Isitlegaltoindexintoastruct?:AnswerbySlava.我认为这是比此处提供的任何解决方案都好得多的解决方案,因为绝对没有未定义的行为。希望这对下一个人有帮助,因为现在实现对我来说已经太迟了。在您评论告诉我使用数组或vector或任何形式的容器之前,我不能这样做是一个残酷的事实。我知道,这可以用一个数组来解决,否则任何解决方案都非常“hacky”。我很想使用容器,但我绝对不能。我是一家大型公司的中层开发人员,我们正在使用公司范围的库通过以太网发送数据。有多种原因导致它不支持数组/vector,而是使用POD结构(普通旧数

c++ - transform_iterator 编译问题

你好,我不喜欢发布编译问题,但我真的搞不懂这个问题。使用此代码:#include#includeusingnamespacestd;templatestructget_value{constV&operator()(std::pairconst&p){returnp.second;}};classtest{typedefmapTMap;TMapmymap;public:typedefget_valueF;typedefboost::transform_iteratortransform_iterator;transform_iteratorbegin(){returnmake_tran

c++ - boost.asio 如何发现我的服务器应用程序正在监听哪个端口?

我有点奇怪,当客户端应用程序连接到服务器时,boost.asio不使用基本概念——使用IP地址和端口。可能是我对Boost有点菜鸟-我接受-但无论如何我不明白。所以,我有这样的代码让客户端连接到本地主机上的服务器:boost::asio::io_serviceio_service;tcp::resolverresolver(io_service);tcp::resolver::queryquery("localhost","daytime");tcp::resolver::iteratorendpoint_iterator=resolver.resolve(query);tcp::re

c++ - 在 C++ 模板函数中,我可以返回取消引用的参数类型吗?

我的意思是下面的。我想要一个模板函数,它采用两个vector迭代器(或两个指向double组的指针)并返回一个与我传递的vector迭代器或数组指针有某种关联的double。但是,我希望它适用于double或int,或任何算术类型。我想我不能说:templateT*func(TBegin,TEnd)Tnew_variable=Begin+5;return(*new_variable);}因为编译器不会理解T*的含义。我想到的一个解决方案是将我要返回的内容作为第三个参数:templatevoidfunc(TBegin,TEnd,T*new_variable)new_variable=Be

c++ - for 循环、返回语句、警告、c++ 中的 vector 迭代器

我有三个关于C++家庭作业的问题。目标是创建一个简单的回文方法。这是我的模板:#ifndefPALINDROME_H#definePALINDROME_H#include#include#includetemplatestaticboolpalindrome(conststd::vector&input){std::vector::const_iteratorit=input.begin();std::vector::const_reverse_iteratorrit=input.rbegin();for(inti=0;istaticvoidshowVector(conststd::v