在相当大的Ruby应用程序中,我们有一种情况,即给定的对象由几个东西识别:name和id,比如说.这些值类型中的每一个都有不同的用途,因此不完全等效(id和name在不同的地方持续存在).因此,我们将围绕应用程序传递各种值(ID,名称和对象).这种情况至少在某种程度上似乎是一个问题,因为我们已经被错误所困扰,这些错误涉及不清楚应该将哪种类型传递给给定的函数.我实际上回想起多年来在许多应用程序中看到类似的问题代码,尽管我再也没有给出具体的名称.
Ruby作为一种无类型语言,不像C++那样允许基于类型的经典多态函数.作为一种解决方案,一位同事经常采用这种代码:
def initialize starting_value
if starting_post.kindof? Foo
@starting_id = get_id_from_foo starting_value
elsif starting_post.kindof? Bar
@starting_id = get_id_from_bar starting_value
else
raise "illegal type"
end
end
Run Code Online (Sandbox Code Playgroud)
围绕我们的代码库(不仅仅是初始化器)的代码的增加导致我称之为"凌乱多态".它经常有效但有时会产生非常令人费解的情况.
我有三个问题.
我可能正在做一个基于iPhone的应用程序进行近乎实时的声音处理(过滤等).我想知道最好的入门方式.我想创建一个音频线索进行记录和处理声音,描述在这里?
我应该清楚.一般来说,我不是在问如何进行信号处理.我知道其中一些,我的团队的专家会处理剩下的事情.我问iphone上声音数据的"低级"接口是什么.
我的iphone开发已被推迟了一两个星期,所以我现在无法访问deve套件.一旦我可以访问该套件,我会将一个答案标记为正确.
我将维护已排序的值列表.我将在列表中插入任意值的项目.每次我插入一个值,我想确定它在列表中的顺序位置(是第1,第2,第1000).什么是最有效的数据结构和算法来实现这一目标?显然有很多算法可以让你这样做,但我没有看到任何方法可以使用简单的STL或QT模板功能轻松做到这一点.理想情况下,我想了解现有的开源C++库或可以执行此操作的示例代码.
我可以想象如何为此目的修改B树或类似的算法,但似乎应该有一个更简单的方法.
EDIT3:
Mike Seymour很好地证实,正如我在原帖中写的那样,使用简单的STL确实无法完成这项任务.所以我正在寻找一个好的btree,平衡树或类似的开源c ++模板,它可以在没有修改或尽可能少修改的情况下完成--Pavel Shved表明这是可能的,但我不想深入实现平衡树我.
(历史应该显示我使用make_heap将Mathieu的代码修改为O(log N)的不成功的努力)
编辑4:
我仍然给信贷帕维尔用于指出B树能够给一个解决方案,这一点,我不得不提,实现这种功能,但并不实现是最简单的方法定制 B-树的C++自己的模板是使用内存数据库.这将为您提供log n并且相当容易实现.
我正在使用git for windows来管理本地项目.我有两个分支,'master'和'change_specific'.我在'change_specific'中添加了一些额外的文件.切换到"master"时,这些文件不显示.我打电话的时候
git merge -m "don't need old branch" master change_specific
Run Code Online (Sandbox Code Playgroud)
git告诉我"已经是最新的了.好啊!".然而,分支似乎有不同的文件.我想删除'change_specific'并完成它,但我担心会消灭我添加的文件 - 这是一件坏事.当我扫描git文档时,似乎有些东西我错过了.发生了什么事,我该怎么办?
algorithm ×1
audio ×1
binary-tree ×1
c++ ×1
git ×1
iphone ×1
polymorphism ×1
refactoring ×1
ruby ×1
stl ×1
tdd ×1
templates ×1