jjzjj

Accumulate

全部标签

映射过滤器并折叠C ++

我有一个通常适合Java流的问题,但是我目前正在使用C++11。我在Java中解决此问题的方式是:intsolution=myList.stream()//myListisanarraylistofMyClass.mapToInt(MyClass::GetInt).sum();在探索C++标准库后,我了解到std::transform和std::accumulate存在。我唯一的问题是std::transform似乎只能从类型映射T输入T,我需要从类型中映射的地方T输入V(整数),在我积累之前。理想情况下,我希望能够将这种逻辑链接在一起,而不是拥有存储每个步骤中间结果的临时阵列。有没有惯用的C

java - 如何在列表中使用 JSON Accumulate 方法?

我正在尝试下面的代码....publicStringlistToJsonString(StringkeyName,Listattrs){JSONObjectjson=newJSONObject();json.accumulate(keyName,attrs);returnjson.toString();}但是当我检查json变量时,它包含如下所示的空值{"myKey":[{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{}]}当我检查attrs变量时,它包含22个元素数据。我在这里做错了什么?我只是将我的列表

具有 3 个参数的 Java8 stream.reduce() - 获得透明度

我编写这段代码是为了将单词列表缩减为一个很长的计数,即有多少单词以“A”开头。我编写它只是为了学习Java8,所以我想更好地理解它[免责声明:我意识到这可能不是编写此代码的最佳方式;这只是为了练习!]。LongcountOfAWords=results.stream().reduce(0L,(a,b)->b.charAt(0)=='A'?a+1:a,Long::sum);中间参数/lambda(称为累加器)似乎能够在没有最终“Combiner”参数的情况下减少完整列表。事实上,Javadoc实际上说:The{@codeaccumulator}functionactsasafusedma

java.util.stream.Collectors : Why is the summingInt implemented with an array?

标准收集器summingInt在内部创建一个长度为1的数组:publicstaticCollectorsummingInt(ToIntFunctionmapper){returnnewCollectorImpl(()->newint[1],(a,t)->{a[0]+=mapper.applyAsInt(t);},(a,b)->{a[0]+=b[0];returna;},a->a[0],CH_NOID);}我想知道是否可以只定义:privateCollectorsummingInt(ToIntFunctionmapper){returnCollector.of(()->0,(a,t)->

c++ accumulate如何将特定函数应用于最后一个元素

我有一个关于std::accumulate的问题。通常,accumulate需要std::vectorvect,类型的种子T并将(左)折叠函数fTxU->U对于那个范围:Tresult=accumulate(vect.begin(),vect.end(),seed,f);是否有一种自然的方式来应用特定版本的f最后一个元素?这是针对PDE的,我对最后一步有特殊条件。我们可以这样做:Tresult1=accumulate(vect.begin(),vect.end()-1,seed,f1);Tresult2=f2(result1,vect.back());但我想知道是否有更自然的方法,因为

c++ - 通过 clang-format 格式化 lambda 背后的逻辑是什么?

我在Emacs(24.5.2版)中使用clang-format(3.5版)。下面是一段由clang-format以LLVM风格格式化的简单代码:intmain(){std::cout";std::stringword;while(std::cin>>word){std::cout";}return0;}请注意它是如何对齐lambda的正文和右括号的。这种格式是否有任何逻辑,或者它只是缺乏对lambda的支持?我需要设置clang-format的配置参数以获得更好的格式吗? 最佳答案 std::accumulate(word.cbeg

c++ - 如何让这个并行求和函数使用 vector 指令?

作为一个业余项目,我正在研究多线程求和算法,在处理足够大的数组时,它的性能优于std::accumulate。首先,我将描述我对此的思考过程,但如果您想直接跳到问题,请随时向下滚动到该部分。我在网上找到了很多并行求和算法,其中大部分采用以下方法:templateTparallel_sum(IT_begin,IT_end,T_init){constautosize=distance(_begin,_end);staticconstauton=thread::hardware_concurrency();if(size>partials;partials.reserve(n);autoch

c++ - accumulate 的 Functor 有什么要求?

我在这里写了一个答案:https://stackoverflow.com/a/44481507/2642059使用accumulate.仿函数必须是二进制的,带有如下签名:Retop(constauto&a,constauto&b)但是:Thesignaturedoesnotneedtohaveconst&对二元仿函数的要求是:Mustnotinvalidateanyiterators,includingtheenditerators,ormodifyanyelementsoftherangeinvolved当积累到的对象本身就是一个容器时,我不清楚对仿函数的要求。例如,是否允许这样的

c++ - 使用 std::accumulate 计算 vector 元素总和的最准确方法是什么?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:C++floatprecisionquestion我遇到了一个问题,即使用std::accumulate确定三种方法中最精确的方法来计算vector元素之和,vector元素之和只能是正数。1)doublesum(vector&v){returnaccumulate(v.begin(),v.end(),0.0);}2)doublesum(vector&v){sort(v.begin(),v.end());returnaccumulate(v.begin(),v.end(),0.0);}3)doublesum(

c++ - 我们应该如何在函数中使用带有 std::accumulate 的模板来通过考虑模板而不是 "init"来返回正确的类型

std::accumulate的返回类型取决于“init”,即如果它是整数,它将返回整数,如果是double,它将返回double。我有一个像这样求和的模板函数:Tmean(std::vectorvector){Tsum=std::accumulate(vector.begin(),vector.end(),X);}我应该用什么代替X? 最佳答案 您可以只使用T{},它是默认构造的T。例如Tsum=std::accumulate(vector.begin(),vector.end(),T{});如果你需要用一些初始值来初始化它,你可