小编Iss*_* T.的帖子

完全持久链表

为什么没有任何实现(在 C、C++、Java 甚至 Python 中)完全持久(不一定是功能性)的链表,其修改次数具有恒定的时间/空间开销?

我想到的数据结构是本文中描述的: http://www.cs.cmu.edu/~sleator/papers/Persistence.htm

经过在谷歌上进行长时间搜索后,我什至无法找到具有上述开销的部分持久链表实现。

PS:我所说的持久性的定义是在以下维基百科页面中描述的: http: //en.wikipedia.org/wiki/Persistent_data_struct

编辑(问题被搁置后):

我认为提到的原因不适用于我的问题。我并不是完全要求在不同的可用图书馆之间进行推荐,因此不能有“固执己见的答案和垃圾邮件”。我的问题是令人惊讶的是,理论上应该很棒的数据结构却没有被任何已知的语言实现。因此,在我自己实现它之前,我问了这个问题,看看是否有这样的答案:“这很正常,数据结构 X 主导了您正在寻找的数据结构,这就是为什么尽管它很简单,但它尚未实现”。另一个答案可能是“它没有你想象的那么好,因为有一个很大的隐藏常量”或者“它与当今缓存的构建方式做得不太好”......如果我的问题不够清楚,我很抱歉。我改变了我的问题,使我的要求现在更加明确。

c++ java containers persistent-data

5
推荐指数
1
解决办法
1488
查看次数

小整数向量的有效比较

我有小矢量.它们中的每一个都由10个整数组成,这些整数介于0和15之间.这意味着矢量中的每个元素都可以使用4位写入.因此,我可以连接我的向量元素并将整个向量存储在单个long类型中(在C,C++,java ...中)

如果对于0,...,9,v1 [i]> = v2 [i]中的每个i,向量v1支配向量v2

我想写一个方法compare(long v1, long v2),如果非向量支配另一个,则返回0,如果第一个占优势,则返回1,如果第二个占优势,则返回-1.

除了获得每个i组件并进行正常整数比较的10倍之外,还有任何有效的方法来实现比较吗?

编辑

如果v1与v2完全相同则返回1或-1都很好

c integer compare bit-manipulation string-comparison

5
推荐指数
1
解决办法
203
查看次数

Cmake测试:是一个针对libc ++或libstd ++编译/链接的库?

我正在使用cmake来管理使用第三方库的项目.

该库可以针对libc ++或libstd ++进行编译/链接(具体取决于版本).

我知道如何告诉cmake针对libc ++或libstdc ++编译/链接我的项目,但我不知道如何检查我使用的库是否是针对libc ++或libstd ++编译/链接的.是否有任何cmake命令来检查?

c++ cmake libstdc++ libc++

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

julia迭代:开始,接下来,完成副作用

迭代中朱莉娅可以为新定义的类型通过实施具有3个功能迭代接口来实现:start,next,done

我看到这些函数的末尾没有惊叹号,所以根据我对julia命名约定的理解,这3个函数不应该修改它们的参数.特别是这两个循环应该给出相同的输出

state = start(iter)
while !done(iter, state)
    (i, state) = next(iter, state)
    @show i
end


state = start(iter)
while !done(iter, state)
    (other_i, other_state) = next(iter, state)
    (i, state) = next(iter, state)
    @show i
end
Run Code Online (Sandbox Code Playgroud)

我错了吗?我问,因为我碰到了外部julia包中的一些迭代器而不尊重它.

julia

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

检查类型是否实现了 Julia 中的接口

如何检查 Julia 中的类型是否实现了接口?

例如迭代接口由函数start, next,实现done

我需要的是根据参数类型是否实现给定的接口来对函数进行专门化。

编辑

这是我想做的一个例子。

考虑以下代码:

a = [7,8,9]
f = 1.0    
s = Set()
push!(s,30)
push!(s,40)

function getsummary(obj)
  println("Object of type ", typeof(obj))
end

function getsummary{T<:AbstractArray}(obj::T)
  println("Iterable Object starting with ", next(obj, start(obj))[1])
end

getsummary(a)
getsummary(f)
getsummary(s)
Run Code Online (Sandbox Code Playgroud)

输出是:

Iterable Object starting with 7
Object of type Float64
Object of type Set{Any}
Run Code Online (Sandbox Code Playgroud)

这是我们所期望的,因为Set不是AbstractArray. 但显然我的第二种方法只需要类型 T 来实现迭代接口。

我的问题不仅与迭代接口有关,还与一组函数定义的所有接口有关。

编辑2

我认为我的问题与

https://github.com/JuliaLang/julia/issues/5

既然我们可以想象类似的事情T<:Iterable

julia

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

Apple Clang; 使用C++ 11和libstdc ++

initializer_list在使用-stdlib=libstdc++和时编译一个带有空函数的简单Hello文件时,我遇到了一个问题-std=c++11

如果我只使用-std=c++11(这意味着用libc ++编译)

然后文件编译并打印Hello!

如果我评论function_test,我同时使用-std=c++11-stdlib=libstdc++

然后文件编译并打印Hello!

如果我保留这个功能function_test,我会同时使用-std=c++11-stdlib=libstdc++

然后我收到以下错误:

$ g++ -stdlib=libstdc++  -std=c++11   -o test test.cpp
test.cpp:1:10: fatal error: 'initializer_list' file not found
#include <initializer_list>
          ^
1 error generated.
Run Code Online (Sandbox Code Playgroud)

这是我的档案

#include <initializer_list>
#include <iostream>
using namespace std;

void function_test(initializer_list<int> something){}

int main(int argc, char * argv[])
{
   cout << "Hello!" << endl;
   function_test({0});
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是我的苹果铿锵版

Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr
--with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 7.0.2 …
Run Code Online (Sandbox Code Playgroud)

c++ llvm clang libstdc++ c++11

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