如果我有一个整数n
,我怎样才能找到的下一个号码k > n
,使得k = 2^i
,其中一些i
的元件N
由按位移动或逻辑.
示例:如果我有n = 123
,我怎么能找到k = 128
,哪个是2的幂,而不是124
哪个只能被2整除.这应该很简单,但它让我望而却步.
我必须做出关于泛化与多态的决定.
那个场景是标准的:我想让我的单片相互依赖的代码更加模块化,干净和可扩展.它仍然处于可以改变设计原则的阶段,而且,正如我所看到的那样,非常需要.
我会介绍纯虚基类(接口)或模板吗?
我知道有关模板选项的基础知识:更少的间接性,更好的性能,更多的编译但没有后期绑定,等等.
stl不使用太多(或没有?)继承,而boost也没有.但我认为这些都是程序员每2行代码使用的非常小的基本工具.
我认为继承和后期绑定方法对于大部分代码和功能的插件样式更加明智,这些代码和功能在部署之后甚至在运行时期间应该是可互换的,可更新的等.
好吧,我的情景介于两者之间.
我不需要在运行时动态交换代码片段,编译时间很好.通常它也是一个非常核心且经常使用的功能,它在逻辑上不能分成大块.
这让我倾向于模板解决方案.对我来说它看起来也更清洁.
是否有任何重大的不良影响,接口仍然是要走的路?他们什么时候不是?哪个更符合标准的c ++风格?
我知道这接近于主观,但我对一些经历非常感兴趣.我没有Scott Meyers有效C++的副本,所以我寄希望于你们:)
我有一个包含字段名称和jdbc类型代码的数组.(你可以找到的那些int代码
http://download.oracle.com/javase/1.4.2/docs/api/constant-values.html#java.sql.Types.BIT
我使用4级驱动程序.
我无法弄清楚如何向驱动程序询问相应的SQL(DDL)类型名称.它在jdbc和原生方言中很有用.
我有
(CustomerId,1)(客户名称,-8)
而且我要
(customerId,INT)(customerId,VARCHAR(200))
我在哪里可以找到帮助我的功能?我通过zxJDBC在jython中使用jdbc,所以我可以使用所有java和python DB API 2.0功能.
问题一般: 我有一个很大的2d点空间,人口稀少的点.可以把它想象成一个涂有黑点的大白色帆布.我必须迭代并搜索这些点很多.Canvas(点空间)可能很大,接近int的限制,并且在设置点之前它的大小是未知的.
这让我想到了哈希:
理想: 我需要一个带2D点的哈希函数,返回一个唯一的uint32.这样就不会发生碰撞.您可以假设uint32可以轻松计算Canvas上的点数.
重要提示:事先不可能知道画布的大小(甚至可能会改变),所以就像这样
canvaswidth*y + x
遗憾的是,这是不可能的.
我也试过很天真
abs(x)+ abs(y)
但这会产生太多的碰撞.
妥协: 一种散列函数,它提供非常低的碰撞概率.
任何人的想法?谢谢你的帮助.
此致,Andreas T.
编辑:我不得不改变问题文本中的内容:我改变了"能够用uint32计算画布点数"的假设"能够计算画布上的点数(或者要存储的坐标对的数量")通过uint32.我原来的问题没有多大意义,因为我有一个sqrt(max(uint32))xsqrt(max(uint32))大小的画布,它可以通过16位移位和OR进行唯一表示.
我希望这是可以的,因为所有答案仍然对更新的假设最有意义
对不起.
我在共享文件夹中有一个大的存储库.我在该文件夹的VM中使用git.一切都很好,但是存储库很大,当提交很慢时,git会搜索所有目录和文件.我无法将此存储库移出共享文件夹.
我尝试了git add
特定的文件和目录,但是当我这样做时,git commit -m "something"
它仍然通过目录树进入奇怪的状态.
我可以做一些忽略树的其他部分的提交吗?
我是一个autotools newb,我很难弄清楚如何轻松地将特定库链接到一个配置的目标.
我有一个源代码包,我想以通常的方式构建:./ configure && make && make install
不幸的是,其中一个cpps缺少对另一个库的引用.手动编译(调整命令行)有效.但我宁愿"修补"编译脚本.编辑链接参考的标准位置在哪里?
undefined reference to `boost::system::get_system_category()
Run Code Online (Sandbox Code Playgroud)
那是我的错误信息btw.
我从C风格函数中获得了指向一大块已分配内存的指针.现在,调试目的非常有趣,以了解此指针指向的已分配内存块有多大.
是否有什么比通过盲目地越过边界而挑起异常更优雅?
提前谢谢,安德烈亚斯
我在Windows上使用VC++ 2005,在Linux上使用GCC 4.3
我_msize
在VC++ 2005下不幸的是它在调试模式下导致异常....
好.我尝试过上面描述的方式,但有效.至少在我调试并确保在调用库退出后立即执行时,我会在缓冲区边界上运行.奇迹般有效.
它只是不优雅,绝不可用于生产代码.
我想知道是否以及如何在c ++中编写"全能"类实际上会影响性能.
如果我有一个类Point,只有uint x; uint y; 作为数据,几乎已经将数学可以做的所有事情都定义为方法.其中一些方法可能很庞大.(copy-)构造函数只是初始化两个数据成员.
class Point
{
int mx; int my;
Point(int x, int y):mx(x),my(y){};
Point(const Point& other):mx(other.x),my(other.y){};
// .... HUGE number of methods....
};
Run Code Online (Sandbox Code Playgroud)
现在.我加载一个大图像并为每个像素创建一个Point,将它们填充到一个向量中并使用它们.(比方说,所有方法都被调用一次)这只是一个愚蠢的例子!
没有方法但是有很多实用功能,它会比同一个类慢吗?我不是以任何方式讨论虚函数!
我对此的动机:我经常发现自己编写了很好的相对强大的类,但是当我必须像上面的例子中那样初始化/使用大量的类时,我会感到紧张.我想我不应该.
我认为我知道的是:
所以没关系.我错过了什么吗?
我正在尝试构建一个在本机C++中使用VisualStudio '05中的COM组件的应用程序.MSDN中原生和管理的事物的混合完全破坏了我的大脑.(我认为MSDN在这方面是一团糟)我需要一个简短的原生C++代码示例来加载我的Component并使其可用.我很好用编译器创建包装器等.
请不要建议我使用基于对话框的MFC示例,因为它不适用于此组件,并且本身就是一大堆c ...代码.
这可能是本机com与托管com的问题吗?
我完全迷失了,请给我一些支持......
编辑:谢谢你的帮助.我的问题是我所拥有的只是一个注册的dll(实际上是OCX,见下文).我(个人)知道界面应该是什么样的,但我该如何告诉我的程序?没有标题可以定义我可以使用的接口的ID.但我读到c ++编译器可以为我提取并包装它.有谁知道这是怎么做的?
澄清:我只有OCX和组件文档中的线索,它应该公开哪些方法.
我正在尝试使用cmake自动化我的构建过程.目前只有一个问题:
在cmake的哲学中(如果有的话),放在复制数据文件的最佳位置.
我有一个图书馆和一些例子.这些例子需要数据.
我目前正在做以下事情:
我在每个示例的CMakeLists.txt中使用自定义命令将所有数据复制到
CMAKE_CURRENT_BINARY_DIR
后构建步骤中.我在调试工作流程中使用它,因此尚未执行安装目标.
这很有效,但有一些缺点:
我想将这些目录复制到可执行路径,所以我不需要提示如何设置调试工作目录
复制这些目录的最佳时间是cmake配置/生成时间,至少我是这么认为的.我应该这样做,我该怎么做?