草庐IT

istream_iterators

全部标签

c++ - 什么时候应该使用 const_iterator 而不是 auto

下面是一个例子,我认为它说明了使用const_iterator比使用“constauto”更可取的情况。这是因为容器不提供cfind()函数。还有其他选择吗?或者应该使用“constauto”而忽略const的缺失?std::stringGetJobTitle(conststd::string&employee){usingEmployeeTitles=std::unordered_map;EmployeeTitlesemployees={{"Alice","Director"},{"Bob","Manager"},{"Charlie","Developer"}};//Option1.

c++ - GCC 4.7 istream::tellg() 在到达 EOF 后返回 -1

以下代码适用于gcc4.4。但是gcc4.7会给出断言失败。#include#include#includeusingnamespacestd;intmain(){stringinput("abcdefg");stringstreamiss(input);ostringstreamoss;oss在gcc4.7中,如果istream已经到达EOF,tellg()将返回-1。不会调用pubseekoff()和seekoff()在gcc4.4中这不是问题。应该是gcc4.4还是gcc4.7?为什么? 最佳答案 根据C++11第27.7.2

c++ - move_iterator 对于返回纯右值的迭代器被破坏并返回悬空引用

我查看了std::move_iterator的STL源代码并发现它返回Iterator::value_type&&.当Iterator::reference时,这会导致不正确的行为是右值,与Iterator::value_type&不同.我有一个带有代理对象的类reference(如std::vector),它可以隐式转换为value_type.普通迭代器只是取消对这个代理的引用(输入迭代器要求允许这样做),但是std::move_iterator调用转换为value_type带有开销,然后返回对创建的临时对象的悬空引用。std::move_iterator仍然适用于std::vect

c++ - 如何以允许传递临时对象的方式将 std::istream 传递给函数?

我正在尝试创建一个构造函数来从给定的任何istream加载资源。我似乎无法找出将istream参数传递给构造函数的最佳方法。Loader::Loader(istreamstream);由于对象切片,这个显然很糟糕,所以别无选择。Loader::Loader(istream&stream);这就是我现在使用的,看起来还不错。但是它有一个重要的问题——你不能给它一个临时的,因为临时的不能绑定(bind)到非常量引用!例如,以下将不起作用:Container():mLoader(ifstream("path/file.txt",ios::binary){}这是一个相当大的限制,因为我现在被迫

c++ - 为什么 std::istream 不承担其 streambuf 的所有权?

我正在为视频游戏编写某种虚拟文件系统库,例如CRI中间件的ROFS(参见Wikipedia)。我对库的意图是提供访问我开发的游戏资源的自然方式,这些资源存储一些嵌入在可执行文件中的数据,一些在媒体上,一些在本地用户的硬盘驱动器上(首选项,保存游戏文件等).访问这些资源应该像调用一样简单std::auto_ptrdefaultConfigIStream(fslib.inputStream("self://defaultConfig.ini"));std::auto_ptrdefaultConfigOStream(fslib.outputStream("localappdata://con

c++ - m.find(...) == m.end() - 使用的是 iterator 或 const_iterator

std::mapfind/end都提供const_iterator和迭代器,例如iteratorend();const_iteratorend()const出于好奇,如果我有一个std::map,它将在这里被调用/比较,一个迭代器或一个const_iterator?:if(m.find(key)!=m.end()){...}我应该关心吗? 最佳答案 如果m是const,则返回一个const_iterator;否则将返回一个迭代器。如果您所做的只是测试map中是否存在某个元素,那么使用哪个元素并不重要。

c++ - iterator 和 const_iterator (STL) 效率不同

在Qt中有类似的类来列出map。这些类提供了一个返回const_iterator的begin_const()方法。文档说应尽可能使用这些const_iterators,因为它们速度更快。如果实例本身是const,STL只会给你一个const_iterator。只实现了一个begin()方法(为const重载)。使用iterator和const_iterator读取访问元素时有什么区别吗?(我不知道为什么它们在Qt中有区别) 最佳答案 Thedocumentationsaysthattheseconst_iteratorsshould

c++ - istream 提取的字符 >> double

示例代码atColiru:#include#include#includeintmain(){doubled;std::strings;std::istringstreamiss("234cdefipxngh");iss>>d;iss.clear();iss>>s;std::cout我在这里阅读N3337(大概与C++11相同)。在[istream.formatted.arithmetic]中我们有(释义):operator>>(double&val);Asinthecaseoftheinserters,theseextractorsdependonthelocale’snum_get

c++ - 在自定义迭代器上应用 reverse_iterator 后引用失效

我实现了一个双向迭代器,但它不是对数据结构进行操作,而是返回一个可以在两个方向上迭代计算的数学序列。事实上,我正在迭代整数,使用++和--在int上。这意味着数据不会存储在不同的结构中,因此当迭代器超出范围时,值也会超出范围。尽管如此,我希望下一个代码(最小失败示例)示例能够工作,因为迭代器始终保持在范围内。但它不起作用:(#include#include#includeclassmy_iterator:publicstd::iterator{intd_val=12;public:my_iteratoroperator--(int){std::cout();int&i=*it;if(t

c++ - 从 back_insert_iterator 中提取容器的 value_type 的特征类

std::back_insert_iterator的value_type等于void,但它还有一个protected成员container包含指向底层Container的指针。我正在尝试编写一个traits类来提取容器的value_type,如下所示:#include#include#includetemplatestructoutit_vt:OutputIt{usingself_type=outit_vt;usingvalue_type=typenamestd::remove_pointer_t().container)>::value_type;};intmain(){std::v