我对C++很陌生,所以在我学习的时候,我倾向于设计很多Java主义.无论如何,在Java中,如果我的类具有"搜索"方法,该方法T将从Collection< T >匹配特定参数的对象返回一个对象,我将返回该对象,如果在集合中找不到该对象,我将返回null.然后在我的调用函数中,我会检查if(tResult != null) { ... }
在C++中,我发现null如果对象不存在,我就无法返回值.我只想返回一个类型为T的'指示符',它通知调用函数没有找到任何对象.我不想抛出异常,因为它并不是一个特例.
这就是我的代码现在的样子:
class Node {
Attr& getAttribute(const string& attribute_name) const {
//search collection
//if found at i
return attributes[i];
//if not found
return NULL; // what should this be?
}
private:
vector<Attr> attributes;
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能改变它以便我能给出那种标记?
是否可以从Maven启动调试器,如jdb?我有一个pom.xml文件,可以成功编译项目.但是,程序挂起了某个地方,我真的想启动jdb或等效的调试器来查看发生了什么.
我编译使用mvn compile并启动使用:
mvn exec:java -Dexec.mainClass="com.mycompany.app.App"
Run Code Online (Sandbox Code Playgroud)
我期待的是:
mvn exec:jdb -Dexec.mainClass="com.mycompany.app.App"
Run Code Online (Sandbox Code Playgroud)
启动调试器,但像往常一样,我的期望与maven的理念不一致.
另外,我找不到任何文档(在Maven的网站或谷歌上)来描述调试的工作原理.我怀疑我必须使用一些插件.
我试图通过指定某些标准来创建numpy.array的"掩码".Python甚至有这样的语法很好的语法:
>> A = numpy.array([1,2,3,4,5])
>> A > 3
array([False, False, False, True, True])
Run Code Online (Sandbox Code Playgroud)
但如果我有一个标准列表而不是范围:
>> A = numpy.array([1,2,3,4,5])
>> crit = [1,3,5]
Run Code Online (Sandbox Code Playgroud)
我不能这样做:
>> A in crit
Run Code Online (Sandbox Code Playgroud)
我必须根据列表推导做一些事情,比如:
>> [a in crit for a in A]
array([True, False, True, False, True])
Run Code Online (Sandbox Code Playgroud)
哪个是对的.
现在,问题是我正在使用大型数组,上面的代码非常慢.是否有一种更自然的方式来执行此操作可能会加快速度?
编辑:我通过将暴击变成一组来获得一个小的加速.
EDIT2:对于那些感兴趣的人:
Jouni的方法: 1000循环,最佳3:每循环102μs
numpy.in1d: 1000次循环,最佳3:1.33 ms每循环
编辑3:刚刚再次测试B = randint(10,尺寸= 100)
Jouni的方法: 1000循环,最佳3:2.96毫秒每循环
numpy.in1d: 1000次循环,最佳3:1.34 ms每循环
结论:使用numpy.in1d()除非B非常小.
我希望能够使用Matlab-mode(matlab.el)来运行matlab shell.唯一的问题是,Matlab位于远程主机上.这甚至可能吗?如果是,请解释.我现在正在玩流浪汉,但无济于事.
谢谢.
我想将一个字符串向量从C++传递给matlab.我已经尝试使用可用的函数,如mxCreateCharMatrixFromStrings,但它没有给我正确的行为.
所以,我有这样的事情:
void mexFunction(
int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[])
{
vector<string> stringVector;
stringVector.push_back("string 1");
stringVector.push_back("string 2");
//etc...
Run Code Online (Sandbox Code Playgroud)
问题是我如何将这个向量带到matlab环境中?
plhs[0] = ???
Run Code Online (Sandbox Code Playgroud)
我的目标是能够运行:
>> [strings] = MyFunc(...)
>> strings(1) = 'string 1'
Run Code Online (Sandbox Code Playgroud)