草庐IT

double-brace-initialize

全部标签

c++ - 如何计算 double 的平均值,使总误差最小?

假设我们有一个很长的double组,比如说,N==1000000。arrayarr;计算平均值有两种简单的方法。首先doubleresult=0;for(doublex:arr){result+=x;}result/=arr.size();当值的总和很大时,这可能不准确。float会失去精度。另一种方法是:doubleresult=0;for(doublex:arr){result+=x/arr.size();}当数字较小时,这可能会失去精度。是否有任何故障安全方法来计算float的简单平均值?仅使用标准库的解决方案值得赞赏。 最佳答案

c++ - 使用 Int 的初始化列表初始化 Long Double 的 vector

假设我有一个简单的类:classPvector{private:std::vectorpoint_list;public:Pvector(std::initializer_listcoords):point_list(coords){}Pvector(std::initializer_listcoords):point_list(coords){}};这将无法编译,因为longdouble模板化的std::vector无法从int类型模板化的初始化列表中初始化自身.然而,这很不方便,因为删除了第二个构造函数后,我无法在我的代码中执行以下操作:Pvectorpiece_movement(

c++ - std::initializer 列表全局/静态对象的生命周期

std::initializer_list主要用作类构造函数/函数参数,以便将列表元素复制到另一个容器中。但是如何使用std::initializer_list创建一个全局对象呢?例如:structElemType{constchar*name;boolflag;};std::initializer_listMyGlobalData={{"One",true},{"Two",false}};如果查看std::initializer_list模板定义(在VisualStudio2017中选中),它仅包含2个数据成员:const_Elem*_First和_最后。这意味着初始化列表数据应该存

c++ - 将 double 与双文字进行比较?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:HowshouldIdofloatingpointcomparison?是否不建议在C++中比较double和double文字的相等性,因为我猜它取决于编译器?更准确地说,比较硬编码的double(源代码中的文字)和应该计算的double是不行的,因为计算结果的最后一个数字可能与一个不同编译器到另一个。这不规范吗?我听说Knuth的TeXbook中提到了这一点,对吗?如果这一切都是真的,解决方案是什么?

c++ - 在 T 的构造函数中使用 *this = T() 将 "initialize"类型为 T 的对象安全吗?

构造函数Year()在这种情况下安全吗?structYear{intyear;Year(inty):year(y){}Year(){*this=Year(1970);}//*this=this->operator=(Year(1970));};Yeary;我认为是的,因为一旦执行流到达构造函数主体,year就已经用int()初始化了。还有其他问题需要考虑吗?不要考虑同样的技巧可能会引起麻烦的其他情况。 最佳答案 当然,thiswillwork,并且有效。说明在你的ctor-body运行时,所有的数据成员和基础都已经构建好了,并且:[

c++ - 仿函数和 initializer_list 的拷贝

我对复制仿函数和/或初始化器时发生的情况感到有点困惑。在下面的代码中,我认为我会一直复制/移动对象,但不管它是否存在段错误。我似乎做错了什么,但还没有弄清楚,我的错误假设是什么。奇怪的是,在cppreference.com我找不到initializer_list的复制或移动构造函数,所以我想知道在这些情况下实际发生了什么。#include#include#include#includestd::initializer_list>getInitializer(){return{[]()->std::string{return"If";}};}intmain(){std::function

c++ - 在一系列值之间生成随机 double

我目前无法生成介于-32.768和32.768之间的随机数。它一直给我相同的值,但在小数字段中有一个小的变化。例如:27.xxx。这是我的代码,如有任何帮助,我们将不胜感激。#include#include#includeusingnamespacestd;intmain(){srand(time(NULL));doubler=(68.556*rand()/RAND_MAX-32.768);cout 最佳答案 我应该提一下,如果你使用的是C++11编译器,你可以使用类似这样的东西,它实际上更容易阅读,也更难搞砸:#include#i

c++ - 如何从 C++ 中的 pthread 返回 double 值?

阅读此主题后:HowtoreturnavaluefromthreadinC关于如何从pthread返回整数值我测试过它是否可以用于double,但它没有。有没有办法像原始线程中描述的那样从pthread进程返回double、长整数或字符串,而不是返回整数42?如果是怎么办?如果我有一个包含10个位置的静态数组和10个pthread每次修改不同的位置,我会遇到麻烦吗?一个例子就像“线程0只修改数组[0],线程1只修改数组[1]等等”。 最佳答案 线程只需为您希望它返回的结果动态分配内存:void*myThread(void*){dou

c++: "double free or corruption"用于全局外部变量?

我有兴趣在整个程序中只使用一个全局变量。所以我认为实现这一点的最好方法是像这样在头文件中定义它:externconststd::stringCONST_STR="globalstring";但这导致了“双重释放或损坏”运行时错误。删除extern使问题消失。谁能解释一下这种行为?AFAIK,如果没有extern定义,每个翻译单元都会有一个CONST_STR,难道没有办法获得一个完全const的全局变量吗? 最佳答案 解决第一部分和有关丢失extern的其他问题。conststd::stringCONST_STR="globalstr

c++ - 在模板函数中使用 initializer_list

我正在尝试使用函数模板foo将参数转换为initializer_list。但是,它转换的initializer_list具有与输入参数不同的奇怪值。#include#include#include#includeusingnamespacestd;templatevoidfunc(std::initializer_lista_args){if(a_args.begin()!=a_args.end()){autolast=prev(a_args.end());copy(a_args.begin(),last,ostream_iterator(cout,","));coutstructfi