草庐IT

c++:哪些函数给出数组的总和?

我正在寻找C++中的函数,以返回数组所有元素的总和,类似于我们在Matlab中的函数,即sum(A),其中A是一个数组。我知道可以简单地做一个for循环,但是没有任何函数可以这样做吗,例如在“std::”中? 最佳答案 这个函数叫做std::accumulate,并居住在.它适用于标准库容器(能够提供InputIterator,所以几乎每一个)和C风格的数组-如果您使用std::begin和std::end.否则container.begin()/end()当然很好;有关详细信息,请参阅示例使用。需要注意的是,它提供了两个重载,其中

c++ - 为什么 "%I64d"在同一格式字符串中多次使用时会给出奇怪的输出?

当我在codeforces上解决一个编程问题时,我发现当格式说明符“%I64d”在同一格式字符串中被多次使用时,例如:longlonginta,b,c;a=1,b=3,c=5;printf("%I64d%I64d%I64d\n",a,b,c);输出是103然而,当我将每个说明符分开时,例如:longlonginta,b,c;a=1,b=3,c=5;printf("%I64d",a);printf("%I64d",b);printf("%I64d",c);puts("");输出如预期的那样:135这是查看上述代码片段的ideone链接:http://ideone.com/f2udRB请帮

c++ - 括号内的参数包扩展给出了奇怪的输出

我正在尝试实现一个函数,它接受可变数量的字符串并转发到打印函数,该函数需要一个char指针和每个字符串的size,交错.例子:std::stringa="123";std::stringb="1234";forward(a,b);//shouldcalldoPrint(a.c_str(),a.size(),b.c_str(),b.size())我认为下面应该是一个正确的实现,但即使它编译了,行为也让我感到非常惊讶。templatevoidforward(constArgs&...args){doPrint((args.c_str(),args.size())...);}forward(

c++ - 以 X-Y 坐标给出的点之间的最短路径距离

我目前正在开展一个项目,该项目的vector包含大约800个点的X和Y坐标。这些点代表电力线网络。我的目标是计算A点和B点之间的最短距离路径,该路径可以位于也可以不位于由包含电线X-Y坐标的vector给出的路径上。我读过有关Dijkstra算法的资料,但由于我不太熟悉它,所以我不确定是否应该朝那个方向发展。如果我能从您那里得到任何可以指导我解决这个问题的反馈或意见,我将非常感激。 最佳答案 任何寻路算法都依赖于路径,点是没有意义的。您现在拥有的是“航路点”列表。但是你还没有解释这些点是如何连接的。例如,如果任何一个点都相互连接,那

C++11 std::generate 和 std::uniform_real_distribution 调用两次给出了奇怪的结果

在不同的容器上从STL调用std::generate算法两次产生相同的结果。假设我想用-1之间的随机数填充两个float组。和1.:std::arrayx;std::arrayy;std::random_devicerd;std::mt19937_64gen(rd());std::uniform_real_distributiondis(-1.f,1.f);autorand=std::bind(dis,gen);std::generate(x.begin(),x.end(),rand);std::generate(y.begin(),y.end(),rand);您可以在这里进行测试:h

c++ - Visual C++ 2015 在使用 decltype(auto) 时给出 C4552 警告

我想我在VisualC++2015中遇到了一个错误,但我想确定一下。考虑这个片段:templatedecltype(auto)f(Tparam){returnparam+1;}intmain(){autoi=f(10);return0;}VisualC++2015在return语句中给出了这个警告:warningC4552:'+':operatorhasnoeffect;expectedoperatorwithside-effect尽管它似乎对生成的代码没有任何影响。这是编译器错误吗? 最佳答案 这似乎是一个错误。它在这里有一个开放

c++ - boost::call_traits - 为什么 gcc 为此给出 false?

示例:#include#include#includeboost::call_traits::param_typef(){return1;}intmain(){std::cout::param_type>::value::value问题:除非我做错了什么,我想我应该为两者都得到true,但是gcc4.7.0为后者输出false。有什么我想念的吗? 最佳答案 非类类型的右值永远不是const限定的。只有类类型的右值可以是const限定的。因此,即使函数f被声明为返回一个constint,即使函数f的类型是constint(),调用表达

输出与MCQ中给出的选择不匹配

这是我在书中发现的简单C程序。staticcharwer[3][4]={"bag","let","bud"};char(*ptr)[4]=wer;可能的输出printf("%d%d",ptr,ptr+1);是(a)262262(b)262266(c)262263(d)262265当我执行同一程序时,它给了我170174输出,任何人都可以向我解释*ptr的初始化,以及为什么答案不是MCQ中给出的答案之一。附件是问题和解释看答案首先,您应该使用%p打印一个地址。阅读迈克尔·沃尔兹(MichaelWalz)的评论。否则,您正在调用UB.下一个,char(*ptr)[4]=wer;这是定义的ptr成为

c++ - 为什么 const vector<const pair<...>> 给出 'cannot be overloaded' 错误?

我有这个简单的代码:#include#includevoidfoo(conststd::vector>&networks){for(autop:networks){}}voidbla(conststd::vector>&networks){for(autop:networks){}}这会在bla()中产生一个错误:mrvn@frosties:~%g++-O2-W-Wall-g-std=gnu++17-cbla.ccInfileincludedfrom/usr/include/x86_64-linux-gnu/c++/5/bits/c++allocator.h:33:0,from/usr

c++ - 如何存储由 std::unique_ptr 给出的抽象类对象的 vector ?

我有一个循环,在这个循环中我使用一个函数将std::unique_ptr返回给一个抽象类的对象。我想通过push_back将这些对象存储到std::vector中。但由于对象是抽象类型,我得到以下错误:error:cannotallocateanobjectofabstracttype为线cells.push_back(std::move(*cell));其中cells是抽象类型的std::vector而cell是类型std::unique_ptr&&cell(我实际上将cell传递给处理程序类)我知道不能实例化抽象类型,而且我正在理解std:move运算符,它需要以某种方式实例化对象