草庐IT

c++ - CUDA - memcpy2d - 音调错误

我刚开始CUDA编程,并试图执行下面显示的代码。这个想法是将二维数组复制到设备,计算所有元素的总和,然后检索总和(我知道这个算法不是并行化的。事实上,它正在做更多的工作,然后是必要的。然而,这只是为了作为memcopy的练习)。#include#include#include#include#defineheight50#definewidth50usingnamespacestd;//Devicecode__global__voidkernel(float*devPtr,intpitch,int*sum){inttempsum=0;for(intr=0;r>>(devPtr,pitc

c++ - 得到欧拉计划 #27 的错误答案

我正在使用C++进行ProjectEuler#27:Eulerpublishedtheremarkablequadraticformula:n²+n+41Itturnsoutthattheformulawillproduce40primesfortheconsecutivevaluesn=0to39.However,whenn=40,40²+40+41=40(40+1)+41isdivisibleby41,andcertainlywhenn=41,41²+41+41isclearlydivisibleby41.Usingcomputers,theincredibleformulan²−

c++ - 将指针转换为 int/将指针存储为类型 T

我希望计算一个指针被使用了多少次。我有一张map:staticstd::mapcounters;当我想向它插入一个新值时,我会像这样使用它:templateMyClass::addPointer(T*tPtr){counters[((unsignedint)tPtr)]++;}做这样的类型转换可以安全吗?这不是一项昂贵的手术等吗?另外,这是确保每个指针只得到一个计数的合适方法吗?谢谢 最佳答案 IMO,您真的不需要将其转换为unsignedint。您可以使用void*获取map:staticstd::mapcounters;空检查在

c++ - reinterpret_cast<int*>(char*) 与 static_cast<int*>(static_cast<void*>(char*)) - 使用哪个?

当你动态分配了一个char*类型的缓冲区并想将它转换为特定类型时,你是否应该使用类似的东西reinterpret_cast(char*)或者类似的东西static_cast(static_cast(char*))为什么?我个人很想使用后者,因为对我来说,它并不是真正的数据“重新解释”(而只是一种分配缓冲区的机械方式)而且它看起来不像是一个来源错误的方式可能与典型的reinterpret_cast相同,但这是正确的直觉吗? 最佳答案 AccordingtoDaveAbrahams,使用链式static_casts是强制指针类型的正确、

c++ - 如何判断调用了哪个重载函数?

#include#includeusingnamespacestd;floatf(inta,intb){return(a+b);}floatf(floata,floatb){return(round(a+b));}intmain(){cout为什么最后一个输出使用f的第二个定义?一般来说,当函数定义和函数调用之间的参数数量和类型不完全匹配时,如何确定将使用哪个重载函数定义? 最佳答案 在尝试确定标准中为什么一个重载优先于另一个重载后,我得出的结论是不应该,在f(int1,float2)并且代码不应编译。如果您的编译器接受它,则可能在

c++ - float 据在 istream 输入上意外成功转换为整数

我正在编写一个模板函数,该函数将检查用户是否分配了答案应包含的正确数据类型。例如:intmain(){intE;cout(cin);cout函数clear_and_read定义为:templateTclear_and_read(istream&inputstream){cin.sync();//removesanythingstillincinstreamcin.clear();Tinput;inputstream>>input;while(inputstream.fail()){cout>input;}returninput;}现在,如果我尝试输入string而不是integer,这

C++ 类型转换 int * 到类

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Regularcastvs.static_castvs.dynamic_castUndefined,unspecifiedandimplementation-definedbehavior我遇到了一个奇怪的问题。在下面的代码片段中,我定义了一个类classNewClass{public:voidTest(){cout在我的main()方法中,我写:voidmain(){int*ptr=newint();NewClass*n=((NewClass*)ptr);n->Test();}它显示“NewClassTes

c++ - C++ 中的 N Queens 使用 vector

我无法理解回溯,我可以从概念上理解我们采取行动,然后如果找不到解决方案,我们会尝试下一个解决方案。考虑到这一点,我正在尝试解决NQueens问题,我正在找出所有可以放在下一行的可能候选者,然后一个一个地尝试它们,如果一个候选者没有产生解决方案,我将其弹出并继续下一个。这是我想出的代码的核心:voidn_queens(intn){vectorqueens=vector();backtrack(queens,0,n);}voidbacktrack(vector&queens,intcurrent_row,intN){//checkiftheconfigurationissolvedif(i

c++ - 在模板类中重载下标运算符

我正在尝试实现一个通用(模板)双向链表,类似于C#.NET实现。我想构建一个“捷径”方法来获取具有特定索引的元素,并决定使用下标运算符。我按照说明做了,想出了这样的东西。templateclassList{public:T&operator[](intindex){returniterator->GetCurrentValue();//iteratorisoftypeIteratorandreturnsT&}};但是当我开始在我的代码中使用它时:List*myList=newList();...intvalue=myList[i];//iisint我收到一个编译器错误:main.cpp

c++ - 具有非静态 lambda 成员的类不能使用默认模板参数?

这个小测试程序:#include//template//structc{std::functionf=[](inti){returni+i;};};intmain(){};Clang-3.2编译正常,但是从GCC4.7.1和4.8我得到了奇怪的错误:t.cc:6:31:error:defaultargumentfortemplateparameterforclassenclosing‘struct__lambda0’functionf=[](inti){returni+i;};^这是没有人知道的那些晦涩难懂的C++规则异常之一,还是GCC错误?编辑看起来像一个错误。我已经提交了bugr