草庐IT

std-ranges

全部标签

c++ - 与迭代乘法相比,std::pow() 的数值稳定性如何?

使用std::pow()会出现或解决什么样的稳定性问题?如果已知指数是整数?std::sqrt(x)如何在稳定性方面与std::pow(x,k/2)进行比较>?选择上述方法的首选方法以提高到整数次幂,然后乘以平方根是否有意义,或者我应该假设std::pow()对机器来说快速且准确这个精度?如果k=1,与std::sqrt()有区别吗?std::pow(x,k/2)或上述方法如何在稳定性方面与std::sqrt(x)?作为奖励,速度差异可能是多少? 最佳答案 Willitbemorestable(orfaster,oratalldif

c++ - 使用 std::array 创建树

底部的代码会产生以下编译时错误。如果我使用std::vector,错误就会消失或std::array,3>.谁能解释一下这是怎么回事?Infileincludedfrommain.cpp:1:0:/usr/include/c++/4.9/array:Ininstantiationof‘structstd::array’:main.cpp:9:23:requiredfromhere/usr/include/c++/4.9/array:97:56:error:‘std::array::_M_elems’hasincompletetypetypename_AT_Type::_Type_M_e

c++ - std::remove_cv 应该在 const T 数组上产生什么类型?

应该是什么类型std::remove_cv生产?int[3]或constint[3]?constint[3]是一个arrayof3constint对吧?,并且没有顶级cv限定符。所以它不应该产生constint[3]吗??最新版本的gcc/libstdc++正在生成int[3]我认为。这是一个错误吗?为什么/为什么不? 最佳答案 N4140§3.9.3[basic.type.qualifier]/p5,强调我的:Cv-qualifiersappliedtoanarraytypeattachtotheunderlyingelement

c++ - 为什么 std::vector::insert 需要复制赋值?

我试图理解以下行为:#include#includestructFoo{Foo(inta):a_{a}{}constinta_;//Notetheconst};intmain(intargc,char**argv){std::vectorv1{Foo{0}};std::vectorv2{Foo{1}};autofirst=std::begin(v2);autolast=std::end(v2);for(;first!=last;++first){v1.push_back(*first);//Fine}//v1.insert(v1.begin(),first,last);//Doesno

c++ - std::promise 可以从非 POD 对象生成吗?

我的应用程序所做的其中一件事是监听和接收来自套接字的有效负载。我从不想阻止。在收到的每个有效负载上,我想创建一个对象并将其传递给工作线程,直到稍后再忘记它,这就是原型(prototype)代码的工作方式。但是对于生产代码,我想通过使用方便的异步方法来降低复杂性(我的应用程序很大)。async从promise中获取future。为此,我需要在下面由Xxx类表示的非POD对象上创建一个promise。我看不到有任何方法可以做到这一点(请参阅下面我的示例代码中的错误)。这里用async合适吗?如果是这样,我如何构建一个比int更复杂的promise/future对象(我看到的所有代码示例都使

c++ - std::unique_ptr 转移 const 对象的所有权

我有一个A类的对象在方法内部创建。此方法还创建对象的实例B将对象A作为构造函数参数刚刚创建。B必须取得对象的所有权A但它不能修改它。这意味着AB时应删除被删除,但在B的生命周期内它不能修改A.在本例中为std::unique_ptr作为B的成员变量是转移A所有权的正确方法(在std::move的构造函数中使用B)并保证它不会被修改? 最佳答案 是的,这正是您正在寻找的语义。std::unique_ptr声明“我拥有T对象。”指向constA的指针(原始或智能)声明“我无法修改我指向的A”。总而言之,这正是您所追求的。

c++ - 使用 Boost ptree 将 JSON 数组解析为 std::string

我有这段代码,我需要解析/或获取JSON数组作为std::string以在应用程序中使用。std::stringss="{\"id\":\"123\",\"number\":\"456\",\"stuff\":[{\"name\":\"test\"}]}";ptreept2;std::istringstreamis(ss);read_json(is,pt2);std::stringid=pt2.get("id");std::stringnum=pt2.get("number");std::stringstuff=pt2.get("stuff");需要的是像这样检索的“东西”std::s

c++ - 这是正确的行为吗? std::map 迭代器失效

#include#includeintmain(intargc,char**argv){std::mapmap;map.emplace(1,1);autoreverse_iter=map.rbegin();std::coutfirstsecondfirstsecond打印出来:1,12,2根据标准,这真的应该发生吗?我没有接触reverse_iter但它指向的值正在改变。我认为std::map中的迭代器应该可以安全地防止插入。然而,它似乎决定reverse_iter不再指向我告诉它的值,而是指向“此时map末尾发生的任何事情”。更新:更多信息,以防万一:前向迭代器似乎不会发生这种情况(

c++11 std::hash 函数对象类线程安全

在c++11中是在中声明的散列函数类对象线程安全?例如,从多个线程调用此函数是否安全?size_thash1(conststd::string&s){std::hashstr_hash;returnstr_hash(s);}或者,如果有一个全局对象std::hashstr_hash_global;,那么从多个线程调用第二个函数是否安全?size_thash2(conststd::string&s){returnstr_hash_global(s);} 最佳答案 标准库promise,如果您只在标准库对象上调用const限定的成员函数

c++ - 为构造的 std::vector 中的每个元素调用默认构造函数

有没有办法构造std::vector通过为每个元素调用默认构造函数来处理N个元素?来自size_type的构造函数只需调用C的构造函数一次,然后对其余元素使用其复制构造函数。 最佳答案 Theconstructorfromsize_typejustcallsC'sconstructoronceandthenusesitscopyconstructorfortherestoftheelements.自C++11以来不正确.看std::vector::vectordocumentation:...vector(size_typecoun