小编Ann*_*inn的帖子

获得独特的数字并了解他们何时被释放

我有一个物理模拟(使用Box2D),其中具有相同整数ID的物体不会发生碰撞,例如,属于同一个角色的物体.我有一个问题,因为我需要能够为每个可能的实体获取一个唯一的编号,这样就不会有两个字符意外地获得相同的ID.存在有限数量的物体,但是它们是在模拟指示时创建和销毁的,因此一旦它们所属的物体消失,就必须释放唯一的ID.

World负责创建和销毁所有实体,也是管理唯一数字生成的实体,以及物理模拟所涉及的任何其他实体.

到目前为止我想到了两种方法但是我不确定哪种方法会更好,如果它们中的任何一种方法:

  • 保持a vector<short>,数据是浮动的引用数,向量中的位置是ID本身.这种方法的缺点是在编码操纵组ID的实体时会产生不必要的复杂性,因为他们需要确保它们告诉World他们取出的引用数量.

  • vector<bool>如果该ID是空闲的,则保持a ,数据为,并且向量中的位置是ID本身.如果没有空闲插槽,则每次调用唯一ID时,向量都会增长.缺点是,一旦向量达到一定大小,就需要对整个模拟进行审计,但具有实体能够获取唯一数字而无需帮助管理引用计数的优点.

你们有什么想法,有更好的方法吗?

c++ algorithm numbers vector

4
推荐指数
1
解决办法
285
查看次数

在二进制字中找到1的最有效方法?

我不确定会有什么样的东西会被称为(因此笨拙的标题),但我需要这样的东西来处理我正在做的事情.我无法用言语形容它,但我希望这张图能为我解释:

二进制问题图片的事情

在这个例子中,当任意"索引"(例如5)之后的所有内容都被忽略时,获得"on-bits"数量的最快方法是什么?

c++ algorithm bit-manipulation

4
推荐指数
2
解决办法
304
查看次数

OpenGL:未定义VBO函数

我正在尝试使用OpenGL VBO,但是与它们的使用相关的功能glGenBuffersARB()都是未定义的.立即模式功能当然是好的,它只是这些.

我正在使用带有SFML库的VS2010 .该库中的一个包含头文件包含两个<GL/gl.h><GL/glu.h>,并且可执行文件链接到glu32.libopengl32.lib

为什么只缺少这些功能,我怎么能包含它们的使用?

c++ opengl vbo visual-studio-2010 sfml

4
推荐指数
1
解决办法
615
查看次数

如何从Windows剪贴板中读取位图

我正在写一个非常小的C++程序来帮助我激活精灵.我想把它从photoshop复制到剪贴板,在我的程序中操作它,然后用变换覆盖剪贴板.

但问题是,我不确定如何从photoshop读取初始剪贴板.

我可以加载剪贴板GetClipboardData(CF_DIB),并获得一个有效的句柄,但我不知道如何使用该句柄.我已经尝试过使用Image::LoadFromMemory(handle, GlobalSize(handle))能够从内存中加载位图文件的SFML ,但这似乎不起作用.

我是否需要实际解析整个格式?在这种情况下,我会看到什么样的格式结构?是否有可能以任何方式快速破坏数据,使其看起来像位图文件?使用Windows API简单地将其保存到文件是否更容易/可能?(然后我可以用SFML加载该文件进行编辑,那样)

对于我来说,这只是一个快速而肮脏的工具,可以在photoshop中保存大量繁琐的工作,因此效率或稳健性并不重要.

c++ windows bitmap sfml

4
推荐指数
2
解决办法
3814
查看次数

字节序是在编译时决定的吗?

我想要变得懒惰并编写一些代码,如果目标机器的字节顺序与我自己的字节序不同,那么它将会破坏.但我想知道什么时候它会中断,所以如果有必要我可以解决它.

浮点数和整数的字节顺序是编译程序的属性,这样我可以在编译时用某种断言检查它吗?或者它是我必须在运行时声明的东西?

c c++ endianness

4
推荐指数
1
解决办法
559
查看次数

在等待锁定的互斥锁时线程是否会睡眠?

被一个std::mutex::lock()或一个条件变量阻塞的线程是否会以释放其他进程的核心的方式休眠,或者我是否需要手动将这些线程置于休眠状态?如果是真的,会std::mutex::try_lock()允许一种方法来旋转线程而不睡觉吗?

我问的原因是:我希望线程池中的线程有三种状态未使用:旋转2毫秒,然后由互斥锁定250毫秒(假设这让他们睡觉并解除核心),最后被解除分配.

如果我可以帮助它,我想避免手动调用睡眠,调整睡眠持续时间会很困难.那么我可以安全地将其留给互斥锁吗?

c++ multithreading mutex sleep

4
推荐指数
2
解决办法
586
查看次数

将 int32 转换为 uint32 是空操作吗?

我想int32_tuint32_t没有任何转换的情况下将an 的位粘贴到类型中,只是重新解释。以下代码正是我想要的:

int32_t  iA = -1;
uint32_t uA = *(uint32_t*)&iA;
Run Code Online (Sandbox Code Playgroud)

但我想知道,我可以依靠以下更容易编写的演员表来生成相同(或更少)的程序集,理想情况下只是movs?(即,它永远不会对其进行“数学运算”,而不会触及底层位。)

int32_t  iB = -1;
uint32_t uB = (uint32_t)iB;

assert(uA == uB); // ?
Run Code Online (Sandbox Code Playgroud)

c++ int casting type-conversion

4
推荐指数
1
解决办法
217
查看次数

scanf() 不接受空格

我需要一个 scanf() 调用来接受空格(没有制表符或换行符,只有' '空格字形)。

char buffer[2048];
scanf(" %2048[0-9a-zA-Z ]s", buffer);
Run Code Online (Sandbox Code Playgroud)

我从这个问题的答案中得到的这个格式说明符:

如何使用 scanf 允许输入空格

虽然它可以很好地接受第一个输入序列,但它会在第一个空白字符所在的位置终止,并带有一个空字符。这是怎么回事?我可能使用了错误的格式吗?

我应该说,我在这里使用 scanf() 是因为安全不是问题;我是唯一会使用这个特定程序的人,而且输入的格式是严格的。

c c++ scanf

3
推荐指数
1
解决办法
2307
查看次数

如何限制构造对象寿命更长所需的变量范围?

我在堆栈上有一个对象需要另一个对象作为它的构造函数,如下所示:

{
    ObjectDef def(importantData);  // should die as soon as obj is created
    def.setOptionalData(100);

    Object obj(def);  // should live for the remainder of the function body
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,我喜欢将变量def放在自己的范围内.这给了我"def"的名字,并且清楚地表明它不再有用了.

例如,result我想做的事情是obj:

// scope block
{
    int result = complexFunction() + anotherFunction();
    printf("the result is %i", result);
    doMoreThingsWithIt(result); 
}
// "result" is now gone
Run Code Online (Sandbox Code Playgroud)

但问题是,我无法在这里做到这一点,我可以看到.构造函数Object obj不能在范围之前,因为它是构造函数需要的def,并且它不能在范围内,因为obj需要存活的时间比def.

无论如何要将限制def的范围缩短obj,或者我应该接受它必须至少保持一定的范围?

c++ scope api-design raii

3
推荐指数
1
解决办法
350
查看次数

如何在没有UTF-8特定代码的情况下解析多语言文档

我正在编写一个小程序,它使用许多不同的通用语言编写CSV电子表格中的字符,并将它们注入特定于每种语言的较小文件中.

我知道8位字符串对于这个来说太小了,并假设16位wchar_t数据类型就足够了.(我对表情符号或死语言不感兴趣,只有日语,普通话,西班牙语和其他一些语言.)然而,研究这个主题,这项任务似乎wchar_t还是wstring不够?"UTF-8"和"语言环境"经常出现,但是这些主题对于我想要做的事情感觉太远,太复杂/一般......如果可以的话,我现在想要避开它们!

给定一个包含这些常用语言的CSV文档,在Windows上,是否可以将这些字符读入内存,解析它们,然后使用标准的CI/O /解析库和最小的Unicode知识将它们写入新文件?例如,wstring,fgetws(),wcstok(),和wcsstr()是我目前舒适的所有功能.(我确实有一天会学习Unicode,但是这对我来说太过重要了.)

我的数据以这样的方式解析,我只查找分隔符,如引号,标点符号和一些英语单词.我正在读取的文件要么是由程序本身生成的,要么是从电子表格程序中导出的......我不知道如何使用C库指定编码,它可能是自动的吗?电子表格程序允许我选择编码,虽然它不提供UTF-16作为选项,这是不幸的,因为这似乎映射最简单到我的实现wstring(16位).

c c++ csv unicode parsing

3
推荐指数
1
解决办法
355
查看次数