1.std::cerr与std::cout
作用类似,区别在于ceer一般用于显示错误信息,直接发送到显示屏,不会对显示的信息有缓存。
2.int main(int argc,char **argv)
if(argc!=2)
{
std::cerr<<“please specify command line arg ‘-f’ or ‘-p’”<<std::endl;
exit(0);
}
解释:int argc, char argv 用于运行时,把命令行参数传入主程序。
argc – 命令行参数 总个数,包括 可执行程序名。
argv[i] – 第 i 个参数。
argv[0] – 可执行程序名。
例如运行:
abc.exe
argc 等于 1, argv[0] 是 “abc.exe”
例如运行:
rec.exe 4 5.2
argc 等于 3, argv[0] 是 “rec.exe”, argv[1] 是 “4”, argv[2] 是 “5.2”.
3.strcmp
int strcmp(const char *str1, const char *str2)
如果返回值小于 0,则表示 str1 小于 str2。
如果返回值大于 0,则表示 str2 大于 str1。
如果返回值 = 0,则表示 str1 等于 str2。
4.size_t
for(size_t i=0;i<cloud_a.points.size();++i)
size_t在32位架构上是4字节,在64位架构上是8字节,在不同架构上进行编译时需要注意这个问题。而int在不同架构下都是4字节,与size_t不同;且int为带符号数,size_t为无符号数。
为什么有时候不用int,而是用size_type或者size_t:
与int固定四个字节不同有所不同,size_t的取值range是目标平台下最大可能的数组尺寸,一些平台下size_t的范围小于int的正数范围,又或者大于unsigned int. 使用Int既有可能浪费,又有可能范围不够大。
5.随机数产生
cloud_a.points[i].x=1024*rand()/(RAND_MAX+1.0f)//用于产生0——1024之间的随机数
#define RAND_MAX Ox7FFF
其值最小为0,最大为Ox7FFF=15160+15*161+15162+7*163=32767
6.“->”与"."的区别
->是指针指向其成员的运算符 .是结构体的成员运算符。最大的区别是->前面放的是指针,而.前面跟的是结构体变量。
A.B则A为对象或者结构体;
A->B则A为指针,->是成员提取,A->B是提取A中的成员B,A只能是指向类、结构、联合的指针;
7.PCL中pcl::PointCloud::Ptr 和Pcl::PointCloud两个类的相互转换
cloud_ptr为指针,cloud为类/结构体。
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_Ptr(new pcl::PointCloud<pcl::PointXYZ>);
pcl::PointCloud<pcl::PointXYZ> cloud;
cloud=*cloud_Ptr;
cloud_Ptr=cloud.makeShared;
注意:一般常用pcl::PointCloud::Ptr
因为kdtree和octree类中的setInputCloud()函数只支持pcl::PointCloud::Ptr类型
如果设置类型为pcl::PointCloudpcl::PointXYZ cloud
使用时用法为:seg.setInputCloud (cloud.makeShared ())
8.std::vector
std::vectorpointIdxNKNSearch(K) //初始化名为pointIdxNKNSearch的包含K个元素的向量
使用vector,需添加头文件#include<vector>,
要使用sort或find,则需要添加头文件#include<algorithm>。
为了简化书写,需在.h中增加using namespace std;