由于标题可能看起来很混乱,让我举个例子:
typedef bool foo[2];
typedef foo bar[4];
bar what_am_i;
Run Code Online (Sandbox Code Playgroud)
那么,我认为是what_am_i一个[4][2]维数组,还是一个[2][4]维数组?
正如有效C++一书中所述:"尽可能使用const.",人们会认为这个定义:Vec3f operator+(Vec3f &other);更好地定义为Vec3f operator+(const Vec3f &other) const;甚至更好const Vec3f operator+(const Vec3f &other) const;.
或者使用5个const关键字的示例:const int*const Foo(const int*const&)const;
当然,你应该只在可以有的地方包括const.我问的是,尽可能使用它们是一个好习惯吗?虽然它确实为您提供了更多错误安全的代码,但它可能会变得非常混乱.或者,例如,你应该忽略指针和引用const(除非你真的需要它),并且只在类型本身上使用它,因为const int* Foo(const int* parameter)const;它不会太乱了?
其他信息:http: //duramecho.com/ComputerInformation/WhyHowCppConst.html
提前致谢!
我有一个私有子类.我想在JNI包装器中创建该子类的实例并返回它.我用Google搜索并尝试使其工作但没有成功(methodID为null).有什么建议?
JNIEXPORT jobject JNICALL Java_some_Class_some_Jni_Method(JNIEnv *env, jobject this) {
jclass cls = (*env)->FindClass(env, "someClass$someSubclass");
if (cls == NULL)
printf("jclass error.");
jmethodID methodID = (*env)->GetMethodID(env, cls, "<init>", "()V"); // -> problem!
if (methodID == NULL)
printf("jmethodID error.");
jobject obj = (*env)->NewObject(env, cls, methodID);
if (obj == NULL)
printf("jobject error.");
return obj;
}
Run Code Online (Sandbox Code Playgroud)
EDIT1:添加类定义:
public class someClass
{
private class someSubclass {
public someSubclass() {
}
...
}
...
}
Run Code Online (Sandbox Code Playgroud)
EDIT2:好的我发现你需要GetMethodID签名中的父类,所以在我的例子中: jmethodID methodID = (*env)->GetMethodID(env, cls, "<init>", "(LsomeClass;)V");
但现在我使用NewObject函数获得EXCEPTION_ACCESS_VIOLATION.
EDIT3:我还需要为NewObject函数添加调用类对象/指针: jobject obj …
谷歌无法帮助我,所以它是这样的:两种选择算法,FloydRivest 算法和 Introselect,哪一个具有更好的性能。
我假设它是 FloydRivest 算法,但想要 100% 确定。
此外,如果存在用于此目的的更好的算法,我很高兴听到它们。
algorithm performance selection time-complexity space-complexity
我使用了本文档底部提供的代码:http://www.cs.dartmouth.edu/~doug/pearl.ps.gz
import Data.Ratio
infixl 7 .*
default (Integer, Rational, Double)
-- constant series
ps0, x:: Num a => [a]
ps0 = 0 : ps0
x = 0 : 1 : ps0
-- arithmetic
(.*):: Num a => a->[a]->[a]
c .* (f:fs) = c*f : c.*fs
instance Num a => Num [a] where
negate (f:fs) = (negate f) : (negate fs)
(f:fs) + (g:gs) = f+g : fs+gs
(f:fs) * (g:gs) = f*g : (f.*gs + fs*(g:gs))
fromInteger …Run Code Online (Sandbox Code Playgroud) 想象一个方法,它将一个对象作为一个参数并检查每个循环,然后让我们说一些集合中的一些其他值,可以根据传入的参数找到/过滤.检查函数开头是否为空指针并立即返回空集合或空指针是一个好习惯,或者最好不要忽略空指针检查,因为每个循环都会处理它,但是函数将需要更多的时间来执行(因为每次迭代的整体).让我们说这个系列并不大(不是那么耗时).
public ArrayList<Foo> find(Bar bar) {
if (bar == null) { // get rid of these part?
return null; //
} //
ArrayList<Foo> foos = new ArrayList<Foo>();
for (Foo f: Foo.values()) {
if (f.someBarCollection.contains(bar)) {
foos.add(f);
}
}
return foos;
}
Run Code Online (Sandbox Code Playgroud)
我认为最好检查null并立即返回,如果你知道这是浪费时间做任何进一步的行动,因为你知道他们不需要.因此,我倾向于以较短的代码为代价来支持语义,以使事情变得毫无价值.
编辑:让我再详细说明一下.函数的结果与没有空检查部分的OR相同.问题是,我是否应该检查它,只是为了更好的表达(以及一点性能提升,但这不是问题),但代码会更长(因为增加了检查)?
是否有一种简单/优雅的方法可以在列表中为地图中的每个键求和数字,例如Map<String, List<BigDecimal>>我希望得到的Map<String, BigDecimal>?我找不到/想出来......
java ×3
c ×2
c++ ×2
algorithm ×1
arrays ×1
const ×1
constructor ×1
haskell ×1
java-8 ×1
java-stream ×1
keyword ×1
performance ×1
pointers ×1
reduce ×1
reference ×1
selection ×1
typechecking ×1
typedef ×1
winghci ×1
wrapper ×1