我想匹配字符串与通配符(*),其中通配符表示"任何".例如:
*X = string must end with X
X* = string must start with X
*X* = string must contain X
Run Code Online (Sandbox Code Playgroud)
此外,一些复合用途,如:
*X*YZ* = string contains X and contains YZ
X*YZ*P = string starts with X, contains YZ and ends with P.
Run Code Online (Sandbox Code Playgroud)
有一个简单的算法来做到这一点?我不确定使用正则表达式(虽然这是一种可能性).
为了澄清,用户将在上面输入一个过滤器框(尽可能简单的过滤器),我不希望他们自己编写正则表达式.所以我可以很容易地从上面的符号转换出来的东西会很好.
好吧,我希望我在这里犯了一个愚蠢的错误.我有一个DisplayDevice3d列表,每个DisplayDevice3d都包含一个DisplayMode3d列表.我想删除DisplayDevice3d列表中没有任何DisplayMode3d的所有项目.我正在尝试使用Lambda来做它,即:
// If the device doesn't have any modes, remove it.
std::remove_if(MyDisplayDevices.begin(), MyDisplayDevices.end(),
[](DisplayDevice3d& device)
{
return device.Modes.size() == 0;
}
);
Run Code Online (Sandbox Code Playgroud)
即使出6名DisplayMode3d在MyDisplayDevices,只有1个有什么DisplayMode3d的其模式集合中,没有被从列表中删除.
我在这里犯了什么错误?
编辑:
好吧,我的错误是我应该使用MyDisplayDevices.remove_if而不是std :: remove_if,但是下面的答案对于使用std :: remove_if:p是正确的.
MyDisplayDevices.remove_if( [](DisplayDevice3d const & device)
{
return device.Modes.size() == 0;
});
Run Code Online (Sandbox Code Playgroud) 我糊涂了.好吧不要混淆,不要想做6个测试程序,看看哪个算法最好.所以我想我会问我在这里的专家朋友给我带来他们经验的好处.
该场景是一个3d场景,与其内部对象的大小相比,可能面积相当大.场景中可能存在数千个对象.物体的大小从十分之一到大约10个单位不等,但不大(或更小).对象倾向于聚集在一起,但这些聚类可能会出现在场景中的任何位置.所有物体都是动态的,动人的.集群倾向于一起移动,但是当它们发生时,它们的速度可能不会一直相同.还需要考虑静态几何.虽然有大量的动态对象,但场景中也有一些静态对象(静态对象往往比动态对象大一到两个数量级).
现在,我想要的是一个空间数据结构,用于有效地对场景中的所有项目执行碰撞检测.如果算法也支持可见性查询,那么对于渲染管道来说会很棒.为简单起见,假设此处的碰撞检测是宽相的(即所有动态对象都是完美的球体).
所以,在我的研究中,我可以使用以下方法之一:
(1)八叉树(2)松散八叉树(3)线性八叉树(+松散)(4)KD树(5)BSP树(6)哈希
到目前为止(6)是我尝试过的唯一一个.它实际上是在速度方面完全高超(8192项碰撞下1ms的检查我的系统上),如果场景中的对象是平均均匀地分布.如果所有物体都被卷入一个较小的区域,这不是一个好的算法,我想这是可能的.
有没有人对使用哪一个有所了解,或者我可以用来加快速度的任何技巧?我想无论发生什么,我都可以使用单独的BSP树作为静态几何体.我想动态的"领域"是我最关心的问题.注意:没有CUDA,这只是CPU:p.
谢谢
编辑:好的,多亏了Floris,我发现了更多关于AABB Trees的信息.这里有关于GameDev的旧讨论:http://www.gamedev.net/topic/308665-aabb-tree---wheres-the-poly-o_o/ .看起来是一个很好的妥协.
最终编辑:决定不重新发明轮子.子弹物理库可能会为我做所有这些(它有AABB树,也可能非常优化).
我一直在寻找高速和低速(主要是谷歌)以获得快速,高效,模板化(即具有类似STL的属性)的八叉树实现,但没有成功.我想在3D场景图的上下文中使用它.
这样的事情是否存在,或者人们通常会自己推出?我希望stackoverflow的朋友知道在哪里找到一个.
刚从编译器收到此函数的警告:
template<class T>
Matrix3x3<T> & operator - (Matrix3x3<T> const & p)
{
auto m = Matrix3x3<T>(p);
m.m11 = -m.m11; m.m12 = -m.m12; m.m13 = -m.m13;
m.m21 = -m.m21; m.m22 = -m.m22; m.m23 = -m.m23;
m.m31 = -m.m31; m.m32 = -m.m32; m.m33 = -m.m33;
return m;
}
Run Code Online (Sandbox Code Playgroud)
,我想知道为什么返回局部变量或临时的地址不值得一个错误.是否有必须这样做的情况?这只是"未定义的行为"而不是语言约束的理由是什么?
我什么都想不到.
可能重复:
用于JavaScript开发的IDE
我想自学HTML5和Javascript(或者如果不是Javascript,那么现在操作HTML 5和DOM的首选技术都是如此).任何人都可以为此推荐一个良好的开发环境(在Windows 7 PC上)?我可以用记事本和谷歌浏览器开始,但我非常希望有一个开发人员友好的IDE存在这种事情.
此外,作为一个后续问题,Javascript是操纵DOM的方法,还是有其他一些技术,我不知道它是否优越并且全面支持?
谢谢.
编辑:好的,我想稍微扩展一下这个场景,因为我没有把问题放到上下文中.我对使用HTML5/Canvass设计和编写GUI组件感兴趣.我已经用本机开发这样做了,并希望将我的技能扩展到网络上,所以我仍然从技能的角度来看这个基础.因此,我的目标是为其他人提供一些"拖放"(不是适合我开发的Web开发的隐喻)组件.我正在考虑HTML5/Javascript是要走的路,但我已经习惯了一个好的调试器,所以也希望能有这种能力.我不确定浏览器是否在任何合理的意义上支持这一点 - 但是专用IDE中的嵌入式浏览器可能会.
有一个boost :: noncopyable我在我的库里有我自己的noncopyable类.在最新的C++标准中是否有std :: noncopyable或等效的敲门声?
这是一件小事,但是从这样一个阶级派生出来的意图更加清晰.
我最近一直在阅读有关sRGB格式的一些内容,以及它们如何允许硬件自动执行典型显示器的色彩校正.作为我阅读的一部分,我看到你可以使用普通纹理和返回结果的pow函数来模拟这一步.
无论如何,我想问两个问题,因为我之前从未使用过这个功能.首先,任何人都可以从我的截图中确认这是你期望看到的吗?左图是普通RGBA,右图是sRGB目标.场景中没有环境照明,模型是沼泽标准Phong(灯光是聚光灯).
我想问的第二个问题是硬件实际执行的修正是什么?例如,我正在向FBO写帧,后来我使用FBO颜色缓冲区将一个屏幕大小的四边形渲染到后台缓冲区(我打算很快切换到延迟着色).我应该使用附加到FBO的sRGB纹理,还是只需要指定sRGB纹理作为后缓冲区目标?如果您使用的是sRGB,那么所有纹理资源都应该是sRGB吗?
下列:
#include <functional>
struct Foo
{
void bar1() {}
void bar2(int) {}
void bar3(int, int) {}
void bar4(int, int, int) {}
};
int main()
{
Foo foo;
auto f1 = std::bind(&Foo::bar1, &foo);
auto f2 = std::bind(&Foo::bar2, &foo);
auto f3 = std::bind(&Foo::bar3, &foo);
auto f4 = std::bind(&Foo::bar4, &foo);
f1(1, 2, 3, 4); // success
f2(1, 2, 3); // error
f3(1, 2); // error
f4(1); // error
return 0;
}
Run Code Online (Sandbox Code Playgroud)
f1(1,2,3,4)编译并执行bar1().f2(1,2,3),不编译,f3(1,2)不编译(但bar3有正确的原型),f4(1)不编译.对于这3个案例,我在Visual Studio 2013中遇到的错误是
"类没有将'运算符()'或用户定义的转换运算符定义为指向函数的指针或函数引用,它接受适当数量的参数"
我对模板和标准库的理解有限,但这对我来说似乎没有任何合理意义.有一个相当简单的解释吗?
在Visual Studio 2012中的本机(C++)测试项目中运行单元测试时,有人能告诉我如何启用或获取调试或控制台文本输出吗?
答案不应包括"使用Google测试"这一短语.