我最近向程序员提出了一个关于使用原始类型的手动位操作的原因的问题std::bitset.
从这个讨论中我得出结论,主要原因是它的表现相对较差,尽管我不知道这种观点有任何可靠的依据.接下来的问题是:
什么是对性能的影响,如果有的话,有可能通过将发生std::bitset在一个原始的位操作?
这个问题有意广泛,因为在网上看后我找不到任何东西,所以我会拿走我能得到的东西.基本上我是在std::bitset使用GCC,Clang和/或VC++在一些常见的机器架构上提供一些资源来提供对''bit-bitset'替代相同问题的资源.有一篇非常全面的论文试图回答这个问题的位向量:
http://www.cs.up.ac.za/cs/vpieterse/pub/PieterseEtAl_SAICSIT2010.pdf
不幸的是,它要么超出范围std::bitset,要么被认为超出范围,因此它专注于向量/动态数组实现.
我真的只是想知道是否std::bitset是更好的比使用情况下,它是为了解决方案.我已经知道它比一个整数上的比特更容易和更清晰,但它是否同样快?
我一直在使用Boost库,在Boost.Exception中,我注意到以下代码:
#define BOOST_THROW_EXCEPTION(x) ::boost::throw_exception(x)
Run Code Online (Sandbox Code Playgroud)
出于好奇:领先::之前的目的是boost::throw_exception(x)什么?
如何boost::filesystem::path在Windows上指定相对路径?此尝试失败:
boost:filesystem::path full_path("../asset/toolbox"); // invalid path or directory.
Run Code Online (Sandbox Code Playgroud)
也许是为了帮我调试,如何使用boost :: filesystem获取当前的工作目录?
我正在使用boost :: property_tree在我的应用程序中读取和写入XML配置文件.但是当我写文件时,输出看起来很丑陋,文件中有很多空行.问题是它应该由人类编辑,所以我想获得更好的输出.
作为一个例子,我写了一个小测试程序:
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
int main( void )
{
using boost::property_tree::ptree;
ptree pt;
// reading file.xml
read_xml("file.xml", pt);
// writing the unchanged ptree in file2.xml
boost::property_tree::xml_writer_settings<char> settings('\t', 1);
write_xml("file2.xml", pt, std::locale(), settings);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
file.xml包含:
<?xml version="1.0" ?>
<config>
<net>
<listenPort>10420</listenPort>
</net>
</config>
Run Code Online (Sandbox Code Playgroud)
运行程序后,file2.xml包含:
<?xml version="1.0" encoding="utf-8"?>
<config>
<net>
<listenPort>10420</listenPort>
</net>
</config>
Run Code Online (Sandbox Code Playgroud)
有没有办法获得更好的输出,除了手动通过输出和删除空行?
我试图用OpenCV对一些点进行三角测量,我发现了这个cv::triangulatePoints()功能.问题是几乎没有文档或示例.
我有一些疑问.
它使用什么方法? 我对三角测量进行了一些小的研究,有几种方法(线性,线性LS,本征,迭代LS,迭代本征......)但我找不到它在OpenCV中使用的方法.
我该怎么用?似乎作为输入它需要投影矩阵和3xN齐次2D点.我将它们定义为std::vector<cv::Point3d> pnts,但作为输出它需要4xN数组,显然我不能创建一个std::vector<cv::Point4d>因为它不存在,所以我应该如何定义输出向量?
对于我尝试的第二个问题:cv::Mat pnts3D(4,N,CV_64F);并且cv::Mat pnts3d;,似乎都不起作用(它抛出异常).
我有一个现有的变量,例如
int a = 3;
Run Code Online (Sandbox Code Playgroud)
我现在如何才能创建一个boost::shared_ptr到a?例如:
boost::shared_ptr< int > a_ptr = &a; // this doesn't work
Run Code Online (Sandbox Code Playgroud) Nova如何管理这个?我真的试图做同样的事情:为用户提供一个按钮来清除并选择他们的新默认启动器.
我可以获取默认的应用名称并显示它:
private String getPrefered(Intent i) {
PackageManager pm = this.getActivity().getPackageManager();
final ResolveInfo mInfo = pm.resolveActivity(i, 0);
return (String) pm.getApplicationLabel(mInfo.activityInfo.applicationInfo);
}
Run Code Online (Sandbox Code Playgroud)
这里Intent i是
Intent home = new Intent("android.intent.action.MAIN");
home.addCategory("android.intent.category.HOME");
Run Code Online (Sandbox Code Playgroud)
然后我调用系统ResolveActivity,
private void makePrefered() {
Intent selector = new Intent("android.intent.action.MAIN");
selector.addCategory("android.intent.category.HOME");
selector.setComponent(new ComponentName("android", "com.android.internal.app.ResolverActivity"));
startActivity(selector);
}
Run Code Online (Sandbox Code Playgroud)
选择器出现并正常运行,但它实际上并未设置或清除任何值.在调试时,似乎我错过了一些额外的东西?当我调用该makePrefered方法时,我收到以下日志消息,
I/ActivityManager( 602): START {act=android.intent.action.MAIN cat=[android.intent.category.HOME] cmp=android/com.android.internal.app.ResolverActivity u=0} from pid 22641
Run Code Online (Sandbox Code Playgroud)
当我使用Nova实现时,我看到了所有这些,
I/PackageManager( 602): Result set changed, dropping preferred activity for Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10200000 (has extras) } type null …Run Code Online (Sandbox Code Playgroud) 我有以下代码:
glShaderSource(shader, 1, (const char **)data.c_str(), NULL);
Run Code Online (Sandbox Code Playgroud)
但这会让我的程序崩溃.我怎么转换std::string成const char **?我也试过, (const char **)&但它说"需要l值",我不明白.我使用这段代码时工作正常:
const char *data = "some code";
glShaderSource(shader, 1, &data, NULL);
Run Code Online (Sandbox Code Playgroud)
但我不能直接从一个工作std::string.我可以char为它分配一个新数组,但这不是很好的代码.
我也尝试过,const GLchar但显然它没有任何区别.
所以我在研究后听到的是,唯一可靠的免费OCR选项是Tesseract或CuneiForm.
现在,Tesseract文档非常可怕,他们给你的只是一堆Visual Studio代码(适用于我的Windows),从那里你就可以在他们的API海洋中独立完成.您所能做的就是使用编译的exe然后在tiff图像上使用它.
我期待至少很短的文档告诉你如何拉动他们的API调用来使用OCR至少是一个小例子但是没有,他们的文档中没有类似的东西.
CuneiForm:我下载了它,"很棒"一切都用俄语.:(
这些家伙真的很难提起一个小例子而不是他们为我们提供了大量不相关的信息,可能有90%的人无法到达,你怎么能在没有开始小事情的情况下到达那里并且他们不解释它们!
所以我有一堆API,但如果它无处可解,我该怎么用?...也许有人可以给我建议和解决方案?我不是要求一个奇迹,只是一些小事来告诉我事情是如何运作的.
我reset()用作shared_pointer的默认值(相当于a NULL).
但是如何检查shared_pointer是否是NULL?
这会返回正确的价值吗?
boost::shared_ptr<Blah> blah;
blah.reset()
if (blah == NULL)
{
//Does this check if the object was reset() ?
}
Run Code Online (Sandbox Code Playgroud)