草庐IT

ITERATOR

全部标签

C++ 模板,默认参数作为方法

对于这个选择排序的实现:templatevoidsort(Iteratorbegin,Iteratorend,Comparecomp){for(autoi=begin;i!=end;++i){automin=i;for(autoj=i+1;j!=end;++j){if(comp(*j,*min)){min=j;}}std::swap(*min,*i);}}我应该如何修改它,使Comparecomp应该是std::less排序方法是否跳过最后一个参数?我通过引入另一种方法来尝试函数重载:templatevoidsort(Iteratorbegin,Iteratorend){sort(be

c++ - 编写 STL 兼容的迭代器

我正在尝试转换一个迭代器类,我必须与STL兼容,以便它可以与STL算法一起使用。在下面的简单(坦率地说无用)示例中,它应该打印0到5的值,包括在内,我收到以下错误,ISOC++禁止递增“Iterator(*)()”类型的指针和,从“Iterator(*)()”到“int”的无效转换我做错了什么?谢谢。#include#include#includeclassIterator:publicstd::iterator{public:Iterator(inti=0):val(i){if(val5)throw;}booloperator==(Iteratorconst&rhs)const{re

c++ - 将 boost::array<char> 复制到 std::string

我正在尝试cvopyboost::array至std::string.boost::array_buffer;std::stringdata;std::copy(_buffer.begin(),_buffer.begin()+bytes_transferred,data.begin());这是行不通的。所以我稍微改变了一下。char_buffer[1024];std::stringdata;std::copy(_buffer,_buffer+bytes_transferred,data.begin());第二个也不起作用。 最佳答案

c++ - 在最后一个元素迭代器上停止 C++

执行循环并在倒数第二个元素后停止的最优雅方法是什么(在C++11中)?注意:我指的是双向迭代器;随机访问迭代器是一个微不足道的特例,当然,因为它们有+和-运算符。std::listx{1,2,3,4,5,6};for(autoiter=x.begin();iter!=x.end();++iter){autoiter2=iter;++iter2;if(iter2==x.end())break;std::cout 最佳答案 使用std::prev函数:std::listx{1,2,3,4,5,6};for(autoiter=x.begi

c++ - std::forward_iterator_tag 的作用是什么?

在分析一个应用程序时,我碰到了gcc4.7.1附带的那部分标准库实现。它是include/g++-v4/bits/vector.tcc:templatetemplatevoidvector::_M_range_insert(iterator__position,_ForwardIterator__first,_ForwardIterator__last,std::forward_iterator_tag){…}我注意到函数签名的最后一个参数只是一个标记,我开始想知道它为什么会在这里。快速浏览thispage表明std::forward_iterator_tag是一个空结构。它在这里的作

c++ - 如何更改集合元素?

我想更改set中的元素,所以我用了set::iterator.但是,编译器认为“元素是常量”。然后我意识到set::iterator是const_iterator...那么,我该如何改变元素呢?删除它然后插入一个新的? 最佳答案 set的元素将按排序顺序排列。如果你被允许修改一个元素,那么这个排序顺序就无法维持。因此您不能修改该项目。您需要删除现有元素并插入一个新元素。 关于c++-如何更改集合元素?,我们在StackOverflow上找到一个类似的问题: h

c++ - 了解 STL 中的迭代器

C++STL中的迭代器到底是什么?就我而言,我使用的是list,而且我不明白为什么你必须制作一个迭代器std::list::const_iteratoriElementLocator;通过取消引用运算符显示列表的内容:cout在将其分配给可能list.begin()之后.请解释迭代器到底是什么,以及为什么我必须取消引用或使用它。 最佳答案 STL中包含三个构建block:容器算法迭代器在概念层面上,容器保存数据。这本身并不是很有用,因为您想对数据做一些事情;您想要对其操作、操纵它、查询它、玩弄它。算法正是这样做的。但是算法不保存数据

c++ - traits 类是如何工作的,它们有什么作用?

我正在阅读ScottMeyers的EffectiveC++.他在谈论特征类,我知道我需要它们在编译期间确定对象的类型,但我无法理解他对这些类的实际作用的解释?(从技术角度) 最佳答案 也许您期待某种让类型特征发挥作用的魔法。在那种情况下,请失望——没有魔法。类型特征是手动为每种类型定义的。例如,考虑iterator_traits,它为迭代器提供typedef(例如value_type)。使用它们,你可以写iterator_traits::iterator>::value_typex;iterator_traits::value_ty

c++ - std::search on single-pass 范围

我想从std::istream中读取数据,直到找到特定的字符序列,即我想实现以下接口(interface):voidread_until(std::istream&is,std::string_viewneedle);使用std::istreambuf_iterator,我相信这相当于std::search在单遍迭代器上的组合。不幸的是,std::boyer_moore_searcher需要随机访问迭代器。是否有任何使用C++标准库(以及与sv的大小成比例的内存)的上述接口(interface)的任何简单实现,还是我必须自己编写代码? 最佳答案

c++ - 是否有采用投影函数的 min_element 变体?

std::min_element将返回由operator定义的最小元素或通过自定义谓词boolPred(T,T).是否有类似的函数返回投影函数f(T)->R所针对的元素取最小值?显然我可以定义boolPred(t1,t2){returnf(t1)但当f是lambda时,这有点不方便。 最佳答案 为什么不使用来自Boost.Iteratorlibrary的boost::transform_iterator(以前称为projection_iterator_adaptor)autoPred=[](some_value_typeconst&