c++的一些用法

一、读写文件

基础知识:
在这里插入图片描述注意到ifstream和ofstream的区别

1、读txt文件(getline+istringstream)

逻辑是:先打开要读的文件,确认是否打开成功,然后用std::getline一次读取一行,然后利用std::istringstream得到每一行的每个元素

string sImu_data_file = sConfig_path + "MH_05_imu0.txt";
	cout << "1 PubImuData start sImu_data_filea: " << sImu_data_file << endl;
	ifstream fsImu;
	fsImu.open(sImu_data_file.c_str());
	if (!fsImu.is_open())
	{
		cerr << "Failed to open imu file! " << sImu_data_file << endl;
		return;
	}
std::string sImu_line;
	double dStampNSec = 0.0;
	Vector3d vAcc;
	Vector3d vGyr;
	while (std::getline(fsImu, sImu_line) && !sImu_line.empty()) // read imu data
	{
		std::istringstream ssImuData(sImu_line); //这里用于执行C++风格的串流的输入操作  https://blog.csdn.net/longzaitianya1989/article/details/52909786
		ssImuData >> dStampNSec >> vGyr.x() >> vGyr.y() >> vGyr.z() >> vAcc.x() >> vAcc.y() >> vAcc.z();
		// cout << "Imu t: " << fixed << dStampNSec << " gyr: " << vGyr.transpose() << " acc: " << vAcc.transpose() << endl;
		pSystem->PubImuData(dStampNSec / 1e9, vGyr, vAcc);
		usleep(5000*nDelayTimes);
	}
	fsImu.close();

2、保存txt文件(fprintf)

逻辑是:先以写的方式打开目标文件,然后确认文件是否已经打开,最后是通过fprintf函数一次写入一行数据

std::string path_ins = "/media/cidi/data/project/data_parse/ins.txt";
FILE *ins_file;
if ((ins_file = fopen(path_ins.c_str(), "w")) == nullptr) {
            std::cout << "Cannot open ins file!" << std::endl;
        }
fprintf(ins_file,
                "%u %lf %.8lf %.8lf %.8lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf\n",
                ins_index, timestamp, utm_position(0), utm_position(1), utm_position(2), umt_quaterniond.x(), umt_quaterniond.y(), umt_quaterniond.z(), umt_quaterniond.w(), 0.0, 0.0, 0.0,
                0.0, 0.0, 0.0);

3、如果路径存在,则删除,不存在,则创建

int unused = system((std::string("exec rm -r ") + bag_path).c_str());
unused = system((std::string("mkdir -p ") + bag_path).c_str());

二、进程休眠控制

参考https://blog.csdn.net/weixin_44732817/article/details/90143888
sleep的休眠时间单位是秒
usleep的休眠时间单位是微秒 10e-6s
nanosleep的休眠时间是纳秒 10e-9s

三、条件编译

参考:https://blog.csdn.net/qq_36662437/article/details/81476572
#define 定义一个预处理宏
#undef 取消宏的定义

#if 编译预处理中的条件命令,相当于C语法中的if语句
#ifdef 判断某个宏是否被定义,若已定义,执行随后的语句
#ifndef 与#ifdef相反,判断某个宏是否未被定义
#elif 若#if, #ifdef, #ifndef或前面的#elif条件不满足,则执行#elif之后的语句,相当于C语法中的else-if
#else 与#if, #ifdef, #ifndef对应, 若这些条件不满足,则执行#else之后的语句,相当于C语法中的else
#endif #if, #ifdef, #ifndef这些条件命令的结束标志.
defined  与#if, #elif配合使用,判断某个宏是否被定义

四、pair, queue, dequeue,vector

pair: https://blog.csdn.net/qq_20853741/article/details/112858358
deque: https://blog.csdn.net/cv_jason/article/details/83023931
vector: https://blog.csdn.net/u014779536/article/details/111239643

五、boost::filesystem

1、遍历获取指定路径下所有文件:使用boost::filesystem::path 和 boost::filesystem::directory_iterator。
注意:boost::filesystem::directory_iterator 不包含子文件夹内文件。
2、如果想迭代获取指定文件夹下所有文件(包含子文件夹内的文件)则使用boost::filesystem::recursive_directory_iterator。
3、具体参考:https://blog.csdn.net/m0_43605481/article/details/125092005

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值