草庐IT

dynamic-programming

全部标签

c++ - dynamic_cast 不适用于非多态类型的原因

对于类B和派生类D:classB{intb;};classD:publicB{intd;};D*d=newD();B*b=dynamic_cast(d);上面的代码可以正常工作——这是一个简单的向上转换。我们确信无论b指向什么,它都有B类(子)对象。但是,B*b=newD();D*d=dynamic_cast(b);不会编译,即使b指向一个有效的D实例——因为基类不是多态的。所以只添加一个空虚方法就可以解决问题。重要的问题是为什么C++要求源类型是多态的?我找到的唯一解释是this,但它只是说“因为这就是它在内部实现的方式”——至少在我看来是这样)。设计dynamic_cast的人可能

c++ - 为什么 "The C++ Programming Language 3rd Edition (online)"中的 Stroustrup 定义函数 sqrt?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭5年前。ImprovethisquestionBjarneStroustrup,在他的书“TheC++ProgrammingLanguage”第2章第23页(pdf第34页)的第3版(online)中,在片段范式中定义函数sqrt.为什么他不直接使用标准库中已经包含的那个?

c++ - 使用动态编程加速函数

我有这个程序//hisourNstaticintg=0;intfun(inth){if(h是否可以使用动态规划来加速它?我发现这个函数在O(2^n)中运行我应该通过动态规划减少运行时间,但不明白这个概念。只是要求在正确的方向上插入。 最佳答案 虽然我无法回答您的实际问题,但我对完全不同的东西很感兴趣,即声明returng+fun(h-1)+fun(n-4);显然,您的函数具有更改全局静态变量g的副作用。我不能100%确定return语句的表达式是否以明确定义的方式实际计算,或者结果是否可能未定义。思考这些函数调用的执行顺序,以及这如

c++ - "the procedure entry point _ZNSt8_detail15_List_node_base7_M_hookEPS0_ could not be located in the dynamic link library libstdc -6.dll."

有个小问题。我有C++代码,它链接到一些库。我以前有源代码的(原始)exe,它在第一台机器上运行完美。还有第二台机器,我在那里处理源代码,更改它,等等。在第二台机器上,该源代码的构建工作正常,当我复制second.exe并尝试在第一台机器上运行它时萌芽它显示错误信息"theprocedureentrypoint_ZNSt8_detail15_List_node_base7_M_hookEPS0_couldnotbelocatedinthedynamiclinklibrarylibstdc++-6.dll."有一件事,second.exe被复制到与original.exe相同的文件夹中,

c++ - 从字符串设置 boost dynamic_bitset

Dynamicbitset我有一个需要填充的用例boost::dynamic_bitset,fromastd::stringbuffer.你能建议如何去做吗?所以我需要想出一个函数voidpopulateBitSet(std::string&buffer,boost::dynamic_bitset&bitMap){//populatebitMapfromastringbuffer} 最佳答案 如果你有这样的二进制数据:stringbuffer="0101001111011";您想像这样初始化它(原来有一个constructor可以处

c++ - dynamic_cast 中的模糊转换

考虑获取对象作为参数并打印其类型的问题:#includeclassA{};classB:publicA{};classC:publicA{};classD:publicC,publicB{};usingnamespacestd;templatevoidprint_type(T*info){if(dynamic_cast(info))cout(info))cout(info))cout(info))cout它给我以下错误:“从派生类‘D’到基类的转换不明确。”但是我没看出歧义在哪里:如果main(d)中声明的对象是D类型,为什么不能直接转换为A类型呢?此外,如果我传递一个字符串类型的参数

C++ 和 Qt : Paint Program - Rendering Transparent Lines Without Alpha Joint Overlap

我已经开始创建一个与绘图板交互的绘图程序。根据笔在数位板上的压力,我更改了正在绘制的线条的alpha值。该机制有效。细线看起来不错,看起来像一个真实的素描。但是因为我在两点之间画线(就像在Qt涂鸦教程中一样)来绘画,所以线接头之间有一个alpha重叠,并且对于粗笔画来说非常明显。这是线对线连词的效果:如您所见,线段之间存在难看的alpha混合。为了解决这个问题,我决定使用QPainterPath来渲染线条。这有两个问题:长的、连续的、粗的路径很快就会滞后于程序。由于路径是相连的,所以它作为一个路径起作用,所以对alpha值的任何更改都会影响整个路径(我不想这样做,因为我想保留混合效果)

c++ - 将 dynamic_cast 与模板一起使用

在用C++实现基于模板的工厂时,我创建了以下allocator函数来实例化给定的子类:templateParentClass*allocator(){ChildClass*child=newChildClass();ParentClass*parent=dynamic_cast(child);if(NULL==parent){deletechild;returnNULL;}returnparent;}一切正常,但是当通过静态代码分析工具(如coverity)运行代码时,deletechild;行被标记为逻辑死代码。我进行运行时检查的原因是为了断言,ChildClass是从ParentC

c++ - 如何序列化 boost::dynamic_bitset?

如何使用boost::dynamic_bitset成员序列化一个类?#include#include#include#include#includeclassA{friendclassboost::serialization::access;boost::dynamic_bitsetx;templatevoidserialize(Archive&ar,constunsignedint){ar&x;}};intmain(){Aa;std::stringstreamss;boost::archive::text_oarchiveoa(ss);oa编译报错(boost1.57)Infilei

c++ - boost::program_options 如何重新加载一个值

我想从配置文件中重新加载一些值。我知道po::store不会更改存在于variables_map中的值。有没有替代方案可以替换值,即使它们已经存在?我尝试删除即将从variables_map重新加载的值,但是po::store无论如何都不会添加新值(即使旧值不能都可以访问)。 最佳答案 P3trus的解决方案涉及向下转换。这是必要的,因为variables_map重载了std::map::operator[]返回一个constvariable_value&(const防止重新分配)。但是在C++11中我们有std::map::at(