我已经阅读了三种方法,可以从各种来源以c ++的形式将内容打印到控制台.
using namespace std;然后使用cout(CodeBlocks标准版)std::cout和std::endl;(C++ Primer)printf(HackerRank)哪个是首选,为什么?
我想知道这是否可行.我有一个功能:
pcl::PointCloud<pcl::PointXYZRGB> createPointCloud(std::Vector<Nodes> input)
Run Code Online (Sandbox Code Playgroud)
返回点云.我想知道是否可以采用这一点云,并指出它的副本.pcl像这样指向云:
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloudPTR(new pcl::PointCloud<pcl::PointXYZRGB>)
Run Code Online (Sandbox Code Playgroud)
我试过这样做:
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloudPTR(createPointCloud(nodeList))
Run Code Online (Sandbox Code Playgroud)
这导致了一个非常明显的错误,即.createPointCloud不会返回指向云的指针.
我也试过这个:
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloudPTR = &createPointCloud(nodeList)
Run Code Online (Sandbox Code Playgroud)
还有这个:
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloudPTR(&createPointCloud(nodeList))
Run Code Online (Sandbox Code Playgroud)
这导致编译错误:"获取临时地址"
是函数返回指针类型的唯一选择还是有办法做我要求的?
编辑:
以下两个答案都是正确的,我已经给Jonathon这个时候第一次得到了正确的答案.
编译以下代码时出现以下错误:
3>c:\hedge\hedge\hedge\AisTarget.h(22) : error C2059: syntax error : 'constant'
3>c:\hedge\hedge\hedge\AisTarget.h(22) : error C2238: unexpected token(s) preceding ';'
Run Code Online (Sandbox Code Playgroud)
#if !defined(AisTarget_h)
#define AisTarget_h
#include "GeneralAviationItems.h"
#include <string>
namespace HEDGE {
using namespace GeneralAviation;
class AisTarget : public WaypointLatLon {
public:
static const int NO_DATA = -1000; //here is the error
};
} // end namespace HEDGE
#endif
Run Code Online (Sandbox Code Playgroud) 所以我有一个已经编写的迭代最近点(ICP)算法,它将模型拟合到点云.对于那些不知道ICP的人来说,快速教程是一个简单的算法,它适合模型的点,最终在模型和点之间提供均匀的变换矩阵.
这是一个快速图片教程.
步骤1.在模型集中找到与数据集最近的点:
第2步:使用一堆有趣的数学(有时基于渐变下降或SVD)将云拉得更近并重复直到形成一个姿势:
![图2] [2]
现在这一点很简单并且有效,我想要帮助的是: 我如何判断我的姿势是否合适?
所以目前我有两个想法,但它们有点像hacky:
ICP算法中有多少个点.也就是说,如果我几乎没有点,我认为姿势会很糟糕:
但如果姿势实际上好呢?它可能是,即使只有几点.我不想拒绝好姿势:

所以我们在这里看到的是,如果低点在正确的位置,它们实际上可以成为一个非常好的位置.
因此,调查的另一个指标是提供的点与使用点的比率.这是一个例子

现在我们排除了距离太远的点,因为它们将是异常值,现在这意味着我们需要一个良好的起始位置让ICP工作,但我对此感到满意.现在在上面的例子中,保证会说NO,这是一个不好的姿势,这是正确的,因为包括点与点的比例是:
2/11 < SOME_THRESHOLD
Run Code Online (Sandbox Code Playgroud)
这很好,但在上面显示的三角形颠倒的情况下会失败.它会说倒三角形是好的,因为所有的点都被ICP使用.
你并不需要是对ICP的专家来回答这个问题,我期待的好点子.利用这些要点的知识,我们如何分类它是否是一个好的姿势解决方案?
同时使用这两种解决方案是一个很好的建议,但如果你问我这是一个非常蹩脚的解决方案,非常愚蠢到只是为了达到它的门槛.
关于如何做到这一点有什么好主意?
PS.如果你想添加一些代码,请继续.我在c ++工作.
PPS.有人帮我标记这个问题,我不确定它应该落在哪里.
我正在搞乱我写的最糟糕的代码,(基本上是试图破解)我注意到这段代码:
for(int i = 0; i < N; ++i)
tan(tan(tan(tan(tan(tan(tan(tan(x++))))))));
end
std::cout << x;
Run Code Online (Sandbox Code Playgroud)
其中N是一个全局变量,运行速度明显慢于:
int N = 10000;
for(int i = 0; i < N; ++i)
tan(tan(tan(tan(tan(tan(tan(tan(x++))))))));
end
std::cout << x;
Run Code Online (Sandbox Code Playgroud)
全局变量会使它运行得慢,会发生什么?
在Gerrit中,在下载部分的更改下,有一个部分允许您下载补丁文件:
使用git apply结果:
$ git apply 441eb56b.diff.base64
fatal: unrecognized input
Run Code Online (Sandbox Code Playgroud)
我使用什么命令来应用此补丁?
我有一个结构,有2个字段:time和pose.我有一个在数组中组成的这个结构的多个实例,所以这个例子是:
poses(1)
-time = 1
-pose = (doesn't Matter)
poses(2)
-time = 2
-pose = (doesn't Matter)
poses(3)
-time = 3
-pose = (doesn't Matter)
...
Run Code Online (Sandbox Code Playgroud)
现在当我打印这个:
poses.time
Run Code Online (Sandbox Code Playgroud)
我明白了:
ans =
1
ans =
2
ans =
3
Run Code Online (Sandbox Code Playgroud)
如何获取输出并将其放入向量中?
我的代码有一个问题,有一些非常奇怪的症状.
代码在我的计算机上编译,具有以下版本:
一个.GCC版本:4.4.2
湾 CMAKE verson:2.8.7
C.QNX(操作系统)版本:6.5.0
并且代码有一个段错误,同时释放一些内存并从函数中退出(不会死于任何代码,只是在函数退出时).
关于这个的奇怪之处是:
代码在发布模式下执行但不在调试模式下执行:
一个.代码是线程化的,因此这表示竞争条件.
湾 我无法通过将其置于调试模式进行调试.
在具有相同版本的所有东西的同事机器上编译时的代码没有这个问题.
一个.关于这一点的奇怪之处在于,工作人员代码可以工作,而且在他的机器上编译时创建的二进制文件(大约相同)大约增加了6mB.
现在烦人的是我无法发布代码,因为它太大而且也适合工作.但是,任何人都可以指出我解决这个问题的方法.
由于我使用QNX,我的调试工具受限,我无法使用Valgrind,因为QNX不支持,GDB并没有真正帮助.
我正在寻找有类似/相同问题的人,原因是什么,以及他们如何修复它.
编辑:
Sooo ......我发现它是什么,但我仍然对它是如何发生有点困惑.
罪魁祸首是这个:
Eigen::VectorXd msBb = data.modelSearcher->getMinimumBoundingBox();
Run Code Online (Sandbox Code Playgroud)
其定义getMinimumBoundingBox是这样的:
Eigen::VectorXd ModelSearcher::getMinimumBoundingBox();
Run Code Online (Sandbox Code Playgroud)
它返回一个始终初始化为的VectorXd VectorXd output(6, 1).所以我立即想到了,这一定是因为VectorXd没有被初始化,而是将其更改为:
Eigen::VectorXd msBb(6, 1); msBb = data.modelSearcher->getMinimumBoundingBox();
Run Code Online (Sandbox Code Playgroud)
但这没效果.事实上,我必须通过将函数的定义更改为此来修复它:
void ModelSearcher::getMinimumBoundingBox(Eigen::MatrixXd& input);
Run Code Online (Sandbox Code Playgroud)
并呼吁这一点
Eigen::VectorXd msBb(6, 1); data.modelSearcher->getMinimumBoundingBox(msBb);
Run Code Online (Sandbox Code Playgroud)
所以现在新问题:
我勒个去?为什么没有第一次改变工作,但第二次做了,为什么我必须通过引用?哦,还有一个大问题,当我的同事编辑它并运行它时,怎么没有这个突破呢?它是一个直接的内存错误,当然它不应该依赖于哪台计算机编译它,特别是因为编译器和所有其他重要的东西都是一样的!!
谢谢你的帮助.
Eigen是c ++中众所周知的矩阵库.我无法找到一个内置函数来简单地将一个项目推到矩阵的末尾.目前我知道可以这样做:
Eigen::MatrixXd matrix(10, 3);
long int count = 0;
long int topCount = 10;
for (int i = 0; i < listLength; ++i) {
matrix(count, 0) = list.x;
matrix(count, 1) = list.y;
matrix(count, 2) = list.z;
count++;
if (count == topCount) {
topCount *= 2;
matrix.conservativeResize(topCount, 3);
}
}
matrix.conservativeResize(count, 3);
Run Code Online (Sandbox Code Playgroud)
这将工作(一些语法可能会出来).但它很容易做一件简单的事.是否已有内置功能?
struct foo
{
const int A;
int B;
foo() : A(10), B(20) {}
};
void main()
{
foo f1;
const_cast<int&>(f1.A) = 4; //line 1
const foo f2;
const_cast<int&>(f2.B) = 4; //line 2
}
Run Code Online (Sandbox Code Playgroud)
第1行和第2行都表现出未定义的行为吗?请问行为有所不同,如果f1和f2是shared_ptr在上面的代码中列出的类型?
c++ ×8
algorithm ×1
const ×1
const-cast ×1
eigen ×1
gerrit ×1
git ×1
matlab ×1
matrix ×1
performance ×1
pointers ×1
qnx ×1
shared-ptr ×1
struct ×1
vector ×1