草庐IT

c++ - iostream 迭代器如何工作?

从标准模板库中,我开始了解istream和ostream迭代器。我不明白他们是如何工作的。我也不明白为什么要使用它们。它们为什么有用? 最佳答案 流迭代器为iostream的格式化提取/插入操作提供迭代器接口(interface)。例如,请考虑以下内容:std::vectorv;for(intn;std::cin>>n;)v.push_back(n);这相当于:std::vectorv(std::istream_iterator(std::cin),std::istream_iterator{});推进迭代器执行一次提取,类似于st

c++ - "Unresolved overloaded function type"尝试将 for_each 与 C++ 中的迭代器和函数一起使用时

//for(unsignedinti=0;i我正在尝试使用for_each循环代替for循环进行赋值。我不确定为什么会收到此错误消息:Infunctionâvoidclean_entry(conststd::string&,std::string&)â:prog4.cc:62:40:error:nomatchingfunctionforcalltoâfor_each(std::basic_string::iterator,std::basic_string::iterator,)â 最佳答案 写:for_each(c.begin()

c++ - 使用 C++ 11 在二叉树(或任意树)上实现迭代器

我想在二叉树上创建一个迭代器,以便能够使用基于范围的for循环。我知道我应该首先实现begin()和end()函数。开始应该指向根。然而,根据规范,end()函数返回“最后一个有效元素之后的元素”。那是哪个元素(节点)?指向一些“无效”的地方不是违法的吗?另一件事是运算符++。返回树中“下一个”元素的最佳方法是什么?我只需要一些建议来开始这个编程。我想扩展/扩充我的问题*。如果我想遍历具有任意数量的树怎么办?让每个节点都有一个子vector,让begin()指向“真正的”根。我可能必须在迭代器类中实现一个队列(广度优先)来将unique_ptr存储到节点,对吗?然后,当队列为空时,我会

c++ - 如何通过 decltype 声明迭代器的值

在C++98中,我通常使用以下代码在迭代器的值类型中声明一个变量:typenamestd::iterator_traits::value_typevalue;在C++11中我们有decltype,我认为推断值类型的最简单方法是:decltype(*iterator)value;不幸的是,对于大多数迭代器,*迭代器的类型是value_type&而不是value_type。在没有类型修改类的情况下,有什么想法如何将上述内容转化为产生value_type(而不是任何引用)?我不认为这个问题是不合理的,因为以下内容相当可靠,但最终会创建另一个变量。autox=*iterator;decltyp

c++ - map 的 union 迭代器?

[前言:像std::map这样的关联C++容器有点像只有一个键列的微型数据库。Boost的bimap将其提升为一个双列表,在两列中进行查找,但仅此而已——没有“polymap”概括这个想法。]无论如何,我想继续将map视为数据库,现在我想知道是否有一个迭代器(或其他解决方案)允许我对几个组成map进行UNION。也就是说,所有映射都具有相同的类型(或值类型和比较器,至少),我想要一个迭代器将整个集合视为一个大的多映射(重复的键是可以的)并让我在正确的union中遍历它订单。这样的东西是否存在,也许在Boost中?或者很容易组装一个?在伪代码中:std::mapm1,m2;union_i

c++ - 自定义迭代器适用于 std::sort 但不适用于 tbb::parallel_sort?

我正在尝试使用tbb::parallel_sort同时对2个数组进行排序。英特尔的文档在这里说https://software.intel.com/en-us/node/506167对迭代器和序列的要求与std::sort相同。。似乎并非如此。我的自定义迭代器与std::sort一起工作得很好,但与tbb::parallel_sort一起产生编译错误。请看下面的代码:intmain()//needsboostandtbbtocompile{intvalues_size=6;intnums1[]={5,8,7,89,56,4};intnums2[]={2,1,1,4,9,2};//WOR

c++ - 如何实现类似std的迭代器的自定义实现?

我编写了一个非常简单的文件管理数据库,基本上看起来像这样:classFileDB{public:FileDB(std::stringdir):rootDir(dir){}voidloadFile(std::stringfilename,File&file)const;voidsaveFile(std::stringfilename,constFile&file)const;private:std::stringrootDir;}现在,我想像使用std::iterator一样遍历数据库中包含的所有文件:voiditerateFiles(){FileDBfiledb("C:\\MyFile

c++ - 从 std::set::insert() 返回迭代器是常量?

这个问题在这里已经有了答案:HowcanIimprovethisdesignthatforcesmetodeclareamemberfunctionconstanddeclarevariablesmutable?(3个答案)关闭9年前。根据C++引用,set::insert应该返回对,其中迭代器指向新插入的元素或现有元素(如果存在)。但是我在给迭代器赋值时遇到了问题,正如这个简单的例子所示:intmain(){setset;*set.insert(5).first=5;return0;}我已经尝试过G++和Clang,但都不起作用。set.cc:7:24:error:read-only

c++ - 为什么 C++ STL 中的算法、迭代器和容器是分离的

我不明白为什么他们在C++STL中将算法、迭代器和容器分开。如果在任何地方都大量使用模板,那么我们可以使用模板参数将所有内容集中在一个地方的类。我收到的一些文本解释说迭代器有助于算法与容器数据交互,但如果容器公开某种机制来访问它拥有的数据怎么办? 最佳答案 与M容器+N算法,通常需要M*N代码片段,但迭代器充当“胶水”,这可以减少到M+N代码片段。示例:在3个容器上运行2个算法std::listl={0,2,5,6,3,1};//C++11initializerlistsstd::vectorv={0,2,5,6,3,1};//C+

c++ - 从输入迭代器创建 C++ std::string 的性能

我正在做一些非常简单的事情:将整个文本文件从磁盘中提取到std::string中。我当前的代码基本上是这样做的:std::ifstreamf(filename);returnstd::string(std::istreambuf_iterator(f),std::istreambuf_iterator());这不太可能对程序产生任何性能影响,但我仍然很好奇这是否是一种缓慢的执行方式。字符串的构造是否存在涉及大量重新分配的风险?使用seekg()/tellg()计算文件大小和reserve()会不会更好(也就是更快)>在读取之前字符串中有那么多空间? 最佳答案