jjzjj

c++ - 如何实现自定义 std::streambuf 的 seekoff()?

我有以下实现基于例如thisquestionandanswerstructmembuf:std::streambuf{membuf(char*begin,char*end){this->setg(begin,begin,end);}protected:virtualpos_typeseekoff(off_typeoff,std::ios_base::seekdirdir,std::ios_base::openmodewhich=std::ios_base::in){std::istream::pos_typeret;if(dir==std::ios_base::cur){this->g

c++ - 如何使用 libc++ istream_iterator 读取文件中的 0xFF?

考虑以下示例代码:#includeusingnamespacestd;intmain(){istreambuf_iteratoreos;istreambuf_iteratoriit(cin.rdbuf());inti;for(i=0;iit!=eos;++i,++iit){cout以及包含以下内容的输入文件:“foo\xffbar”:$hexdumptestin0000000666f6fff6261720000007现在使用clanglibc++与gnulibstdc++进行测试:$maketestclang++-std=c++11-stdlib=libc++-Wall-stdlib=

c++ - boost::lexical_cast 无法识别重载的 istream 运算符

我有以下代码:#include#includestructvec2_t{floatx;floaty;};std::istream&operator>>(std::istream&istream,vec2_t&v){istream>>v.x>>v.y;returnistream;}intmain(){autov=boost::lexical_cast("1231.2152.9");std::cout我从Boost收到以下编译错误:Error1errorC2338:Targettypeisneitherstd::istreamablenorstd::wistreamable这看起来很简单,

c++ - 为什么fstream不利用operator>>的istream原型(prototype)?

我有一个使用友元函数重载运算符的类>>。重载运算符方法在标准cin使用上测试得很好。但是,当我尝试将代码升级为使用ifstream对象而不是istream对象时,原型(prototype)未被识别为有效方法。我的理解是ifstream继承自istream,因此,多态性应该允许ifstream对象与istream重载函数一起操作。我的理解有什么问题吗?是否有必要为每种输入流类型复制函数?类:#include#include#includeusingnamespacestd;classHospital{public:Hospital(std::stringname);std::string

c++ - 这个 C++/C++11 结构是什么意思?

我有这段代码。我不明白这个结构是什么意思。我知道这段代码从输入中读取数字并在unordered_map中计算它的频率。但是什么是[&]?(intx)是什么意思?input(cin)代表什么?我的意思是括号中的“cin”?for_each如何从input(cin)迭代到空eof参数?我不明白这整个结构。unordered_mapfrequency;istream_iteratorinput(cin);istream_iteratoreof;for_each(input,eof,[&](intx){frequency[x]++;}); 最佳答案

C++ - 将 istream_iterator 与 wstringstream 一起使用

我正在尝试为我编写的程序添加Unicode支持。我的ASCII代码已编译并具有以下几行:std::stringstreamstream("abc");std::istream_iteratorit(stream);我将其转换为:std::wstringstreamstream(L"abc");std::istream_iteratorit(stream);我在istream_iterator构造函数中得到以下错误:errorC2664:'voidstd::vector::push_back(std::basic_string&&)':cannotconvertparameter1fro

C++从istream读取int,检测溢出

如果我使用>>运算符从istream中读取一个整数,并且表示的整数大于INT_MAX,则该操作只返回INT_MAX。我目前正在与INT_MAX进行比较以检测溢出,但如果输入操作“2147483647”,那么它会返回一个错误,而实际上没有错误,结果是有效的。例子:http://ideone.com/4bXyGd#include#include#includeintmain(){std::istringstreamst("1234567890123");//Trywith2147483647intresult;st>>result;if(result==INT_MAX)std::cout在

c++ - istream 中的 getline 和 basic_string 中的 getline

stringtext;getline(text.c_str(),256);1)我收到错误消息“错误:没有匹配函数来调用‘getline(constchar*,int)”上面有什么问题,因为text.c_str()也返回一个指向字符数组的指针。如果我这样写chartext[256]cin.getline(text,256,'\n');它工作正常。cin.getline和getline有什么区别?2)怎么会textstring;getline(cin,text,'\n')接受整行作为输入。这个字符数组的指针在哪里? 最佳答案 text.

c++ - istream 提取运算符 : how to detect parse failure?

如何检测istream提取是否像这样失败?strings("x");stringstreamss(s);inti;ss>>std::ios::hex>>i;编辑——虽然问题标题涵盖了这一点,但我忘了在正文中提到:我真的想检测失败是由于格式不正确造成的,即解析,还是由于任何其他与IO相关的问题,以便提供适当的反馈(一个malformed_exception("x")或其他)。 最佳答案 if(!(ss>>std::ios::hex>>i)){std::cerr就这么简单。预计到达时间:这是一个示例,说明此测试如何与流的末尾交互。int

c++ - 为什么 std::istream_iterator 忽略换行符?

我有以下代码:#include#include#includeintmain(){std::stringstreamstr;strit(str),end;for(;it!=end;++it){std::cout输出是:[abcdef][97][98][99][100][101][102]为什么std::istream_iterator忽略换行符? 最佳答案 因为istream_iterator使用operator>>。并且istream::operator>>(char)会跳过空格,除非您取消设置流的skipws标志。(例如使用no