草庐IT

ITERATOR

全部标签

c++ - 使用 std::string 迭代器查找它的字符串的开始和结束

仅给定一个std::string迭代器,是否可以确定字符串的起点和终点?假设我无权访问字符串对象,因此无法调用string.begin()和string.end(),我所能做的就是递增或递减迭代器并测试值。谢谢,菲尔 最佳答案 简短的回答是否定的。长话短说,因为迭代器不应该知道正在迭代的容器或范围,所以他们只需要知道能够跳转到下一个元素(inc或dec到next或prev)取消对它们自己的引用,以揭示对它们所指向的值的引用当然,还要将自己与其他迭代器进行比较,最重要的是与某种“结束”迭代器进行比较。此外,某些类型的迭代器可能做的不仅

c++ - 为什么需要 ForwardIterators 来建模 DefaultConstructible?

我似乎找不到任何标准算法来证明默认构造ForwardIterator的要求。是否有任何实际原因,或者我可以安全地忽略它? 最佳答案 对于标准算法和客户端用户来说,它是为了简化这些类型的迭代器的使用。例如(记住RandomAccessIterator是ForwardIterator的子类型):templatevoidsort(RandomAccessIteratorfirst,RandomAccessIteratorlast){RandomAccessIteratorpivot,i,j;//doyoursortingalgorithm

c++ - 文件/ifstream 的双向迭代器

我需要一个具有双向迭代器/适配器的输入文件流。不幸的是,std::ifstream(和类似的)只能与std::istream_iterator一起使用,它是一种不能向后移动的前向迭代器。(或者我在这里弄错了?)我可以简单地将整个文件加载到内存中,然后在数组上使用更强大的随机访问迭代器;但是我想避免这种情况,并且只阅读我真正需要的内容。可能我真的只需要文件的一小部分。我可以使用Cstdio.h函数以某种方式手动完成,但这会很痛苦。我基本上需要手动实现一个双向迭代器,并牢记它的所有规范。我正在考虑研究boostiostream库,但手册有点让人不知所措,我希望有人能帮助我实现这个特定目标?

c++ - 如何从传递给某些 STL 算法的谓词中获取元素索引?

比如说,我有元素vector和一个掩码数组,我想从vector中提取具有真实相应掩码值的元素以分离vector。有没有办法为此目的使用std::copy_if?问题是,我只有谓词内部元素的值,没有迭代器,所以我不知道地址掩码数组的实际索引。我可以像这样直接操作地址:vectormask;vectora,b;copy_if(a.begin(),a.end(),b.begin(),[&](intx)->bool{size_tindex=&x-&a[0];//Ugly...returnmask[index];});但是,我发现这是一个丑陋的解决方案。有更好的想法吗?更新:另一种可能的解决方案

c++ - 为什么 range-for 找不到我对 std::istream_iterator 的开始和结束重载?

我有这样的代码std::ifstreamfile(filename,std::ios_base::in);if(file.good()){file.imbue(std::locale(std::locale(),newdelimeter_tokens()));for(auto&entry:std::istream_iterator(file)){std::cout哪里std::istream_iterator的begin()和end()定义如下templatestd::istream_iteratorbegin(std::istream_iterator&stream){returns

c++ - '_ITERATOR_DEBUG_LEVEL' : value '0' doesn't match value '2' 检测到不匹配

使用VS2010构建时,我正在构建一个导致许多此类链接错误的库:errorLNK2038:mismatchdetectedfor'_ITERATOR_DEBUG_LEVEL':value'0'doesn'tmatchvalue'2'导致我必须同时发布我的库的发行版和调试版。我没有理由发布lib的调试版本,它只会使二进制分发版膨胀。但是在调试中构建的客户端代码拒绝链接到我的发布库。我以前见过这个问题,但他们似乎没有问正确的问题。我明白这个错误是什么,以及为什么我会得到它(好吧,有点;我不确定到底是什么发出了依赖性。你呢?),但我想知道的是如何消除这种依赖性的发生在我的库中?类似于在使用冲

c++ - 保持数据迭代器的 vector

我有一个功能:voidget_good_items(conststd::vector&data,std::vector&good_items);此函数应检查所有数据并找到满足条件的项目,并在good_items中返回它们所在的位置。用什么代替std::vector最好?std::vector包含所有好的索引。std::vector包含指向项目的指针。std::vector::iterator>包含项目的迭代器。其他??编辑:我将如何处理good_items?很多事情......其中之一是从vector中删除它们并将它们保存在其他地方。也许以后再做别的编辑2:对我来说最重要的问题之一是如

c++ - 如何懒惰地生成一个完成的项目序列并对其进行迭代

我觉得这个问题一定已经被问过并解决了很多次,因为在我看来这似乎是一个非常普遍的场景,但我找不到任何指向解决方案方向的东西。我正在尝试实现一个通用的可迭代Generator对象,该对象会生成一个数字序列,直到满足某个终止条件为止,表示已达到此类条件以停止迭代。从本质上讲,基本思想是拥有类似于Python生成器的东西,其中一个对象产生值,直到它没有更多可产生的值,然后引发StopIteration异常以通知外部循环序列完成。据我所知,问题分为创建序列生成对象,然后在其上获取迭代器。对于序列生成对象,我想我会定义一个基Generator类,然后对其进行扩展以提供特定的行为(例如,从一组范围或

c++ - 前向迭代器是输出迭代器吗?

ForwardIterators必须是OutputIterators吗?我当前的STL实现(VS2012)从input_iterator_tag和output_iterator_tag派生forward_iterator_tag,但我在标准[N3485]中找不到此要求]. 最佳答案 在C++11中,不,前向迭代器不需要是输出迭代器。输出迭代器要求就像迭代器可以具有的一组额外要求,而不管它满足的其余迭代器要求。前向迭代器只需要是输入迭代器(§24.2.5/1):AclassorpointertypeXsatisfiestherequi

c++ - 从 std::istreambuf_iterator 创建 std::string,奇怪的语法怪癖

我在某处发现了以下用于将文件读入字符串的习语:std::ifstreamfile("path/to/some/file.ext");std::stringcontents(std::istreambuf_iterator(file),(std::istreambuf_iterator()));它现在工作得很好。但是,如果我删除第二个迭代器参数周围的括号,即:std::stringcontents(std::istreambuf_iterator(file),std::istreambuf_iterator());一旦我尝试在字符串对象上调用任何方法,例如:constchar*buffe