草庐IT

c++ - 对 'std::istreambuf_iterator' 的用法感到困惑

以下是anexamplefromcppreference.com,TheCodeis:#include#include#include#includeintmain(){//typicalusecase:aninputstreamrepresentedasapairofiteratorsstd::istringstreamin("Hello,world");std::vectorv((std::istreambuf_iterator(in)),std::istreambuf_iterator());std::couti1(s),i2(s);std::cout我有两个问题:有人可以详细说

c++ - 不能将 operator= 与 std::stringstream 一起使用

我正在尝试制作struct,其中一名成员属于std::stringstream类型。我正在使用C++11,并根据http://www.cplusplus.com/reference/sstream/stringstream/operator=/我能行。这是我的代码:structlogline_t{stringstreamlogString;/*!它没有编译,因为我收到这个错误:error:useofdeletedfunction‘std::basic_stringstream&std::basic_stringstream::operator=(conststd::basic_stri

c++ - 使用参数包将 lambda 转换为 std::function

关于将lambda转换为std::function的SO有几个问题s,但我还没有看到一个使用参数包作为参数列表的。这在我的g++(7.1.1-4)版本上似乎已损坏,可能只是不受支持。那么这是合法的c++17(按照标准)吗?如果不是,为什么?#includetemplatevoidFunctor(std::functionf){}intmain(intargc,char*argv[]){autox=[](inta,intb){returna*b;};Functor(x);return0;}上面的代码无法编译,因为它没有通过类型推导。显然明确输入x作为std::function而不是使用a

c++ - 将 std::apply 与可变参数包一起使用

我正在尝试创建一个通用类,它接受一组类型,将它们存储在一个元组中,并且可以对它们应用一个函数。到目前为止我尝试的是以下内容:#includestructBase{virtualvoidbase_function()=0;};templatestructA:publicBase{std::tupleas;A(T...pack):as(pack...){};voidbase_function(){std::apply([](autot){t.base_function();},as);}};structB:publicBase{voidbase_function(){};};structC

c++ - 为什么 std::chrono::duration::operator*= 不像内置的 *=?

如std::chrono::duration::operator+=中所述签名是duration&operator*=(constrep&rhs);这让我很奇怪。我假设持续时间文字可以像任何其他内置一样使用,但事实并非如此。#include#includeintmain(){usingnamespacestd::chrono_literals;autom=10min;m*=1.5f;std::cout输出是150%of10min:10min150%of10:15为什么这样选择界面?在我看来,这样的界面templateduration&operator*=(constT&rhs);会产生

c++ - "UTF-16"和 "std::wstring"有什么区别?

这两种字符串存储格式有什么区别吗? 最佳答案 std::wstring是wchar_t的容器。wchar_t的大小未指定—Windows编译器倾向于使用16位类型,Unix编译器倾向于使用32位类型。UTF-16是一种在16位整数序列中编码Unicode代码点序列的方法。使用VisualStudio,如果您使用不包含BMP之外的字符的宽字rune字(例如L"HelloWorld"),你最终会得到UTF-16,但大多数情况下这两个概念是不相关的。如果您使用BMP之外的字符,std::wstring将不会翻译surrogatepairs

c++ - 通过套接字发送和接收 std::string

我在SO上看到过类似的问题,但没有回答我的问题。我在这里尝试发送和接收字符串:我正在发送std::string:if((bytecount=send(hsock,input_string.c_str(),input_string.length(),0))==-1)这个能不能正确接收?if((bytecount=recv(*csock,rcv.c_str(),rcv.length(),0))==-1)我收到错误:error:invalidconversionfrom‘constvoid*’to‘void*’[-fpermissive]`onrecvline!

c++ - 是否有用于拆分 std::pair 的标准 C++ 函数对象?

有谁知道是否存在用于访问std::pair元素的实际标准(即TR1或Boost)C++函数对象?在过去的24小时内,我曾两次希望我有类似keys函数的Perl散列函数。例如,最好在std::map对象上运行std::transform并将所有键(或值)转储到另一个容器。我当然可以编写这样一个函数对象,但我更愿意重用那些吸引了很多眼球的东西。 最佳答案 boost::bind就是您要找的东西。boost::bind(&std::pair::second,_1);//returnsthevalueofapair例子:typedefstd

c++ - 将 std::find 与谓词一起使用

我想将std::find函数与谓词一起使用(不确定我是否使用了正确的词)。这是代码#include#include#includeusingnamespacestd;classfoo{public:typedefpair>way;typedefpairindex;typedefpair>entry;vectortable;voidbar(){vectorv1;v1.push_back(1);v1.push_back(2);wayw=make_pair(1,v1);vectorv2;v2.push_back(w);indexid=make_pair(10,20);entryen=make

c++ - C++11 中的值初始化对象和 std::vector 构造函数

在C++中,使用C数组而不是std::vector的理由很少。至少对于C++03来说,这几个令人信服的原因之一是不可能使用vector来分配未初始化的对象数组。std::vector的“填充”构造函数是:vector(size_typecount,constT&value=T())意思是……int*array=newarray[1000000];可能比:更有效率std::vectorv(1000000);...因为vector构造函数必须对整数数组进行零初始化。因此,在处理PODvector时,没有真正等同于malloc;您可以获得的最好结果相当于calloc。C++11似乎改变了这一