系列文章目录

我将自己学习MOOS程序中的一些记录记载到这里


文章目录

  • 系列文章目录
  • 前言
  • 一、C enum(枚举)
  • 二、std::vector
    • 1.vector
    • 2.容器特性
    • 3.基本函数实现
  • 三、C++ typedef
  • 四、C++ &
    • 1.引用
    • 2.引用作为参数
  • 五、C++ atof
  • 六、C++ struct
  • 总结

前言

提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、C enum(枚举)

代码示例:

enum DeviceType//
{DEVICE_FOG=0,DEVICE_PAYLOADPC,DEVICE_MODEM,DEVICE_DEPTH,DEVICE_NETBRIDGE,DEVICE_DVL,DEVICE_IRADIUM,DEVICE_PROPULTION,DEVICE_CTD,DEVICE_LOAD,DEVICE_STROBE,DEVICE_GPS,DEVICE_TCM,DEVICE_RADIO,DEVICE_EMERGENCY,DEVICE_SONAR,
};

枚举是 C 语言中的一种基本数据类型,它可以让数据更简洁,更易读。

枚举语法定义格式为:

enum 枚举名 {枚举元素1,枚举元素2,……};

相当于给每个变量起了一个名字,第一个变量DEVICE_FOG=0,那么后续的变量值则为+1。
示例:

#include <stdio.h>enum DAY
{MON=1, TUE, WED, THU, FRI, SAT, SUN
} day;
int main()
{// 遍历枚举元素for (day = MON; day <= SUN; day++) {printf("枚举元素:%d \n", day);}
}

结果

枚举元素:1
枚举元素:2
枚举元素:3
枚举元素:4
枚举元素:5
枚举元素:6
枚举元素:7

二、std::vectorstd::string

1.vector

向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。

2.容器特性

1.顺序序列
顺序容器中的元素按照严格的线性顺序排序。可以通过元素在序列中的位置访问对应的元素。

2.动态数组
支持对序列中的任意元素进行快速直接访问,甚至可以通过指针算述进行该操作。提供了在序列末尾相对快速地添加/删除元素的操作。

3.能够感知内存分配器的(Allocator-aware)
容器使用一个内存分配器对象来动态地处理它的存储需求。

3.基本函数实现

1.构造函数
vector():创建一个空vector
vector(int nSize):创建一个vector,元素个数为nSize
vector(int nSize,const t& t):创建一个vector,元素个数为nSize,且值均为t
vector(const vector&):复制构造函数
vector(begin,end):复制[begin,end)区间内另一个数组的元素到vector中

2.增加函数
void push_back(const T& x):向量尾部增加一个元素X
iterator insert(iterator it,const T& x):向量中迭代器指向元素前增加一个元素x
iterator insert(iterator it,int n,const T& x):向量中迭代器指向元素前增加n个相同的元素x
iterator insert(iterator it,const_iterator first,const_iterator last):向量中迭代器指向元素前插入另一个相同类型向量的[first,last)间的数据

3.删除函数
iterator erase(iterator it):删除向量中迭代器指向元素
iterator erase(iterator first,iterator last):删除向量中[first,last)中元素
void pop_back():删除向量中最后一个元素
void clear():清空向量中所有元素

4.遍历函数
reference at(int pos):返回pos位置元素的引用
reference front():返回首元素的引用
reference back():返回尾元素的引用
iterator begin():返回向量头指针,指向第一个元素
iterator end():返回向量尾指针,指向向量最后一个元素的下一个位置
reverse_iterator rbegin():反向迭代器,指向最后一个元素
reverse_iterator rend():反向迭代器,指向第一个元素之前的位置

5.判断函数
bool empty() const:判断向量是否为空,若为空,则向量中无元素

6.大小函数
int size() const:返回向量中元素的个数
int capacity() const:返回当前向量所能容纳的最大元素值
int max_size() const:返回最大可允许的vector元素数量值

7.其他函数
void swap(vector&):交换两个同类型向量的数据
void assign(int n,const T& x):设置向量中前n个元素的值为x
void assign(const_iterator first,const_iterator last):向量中[first,last)中元素设置成当前向量元素

示例:

#include <string.h>
#include <vector>
#include <iostream>
using namespace std;int main()
{vector<int>obj;//创建一个向量存储容器 intfor(int i=0;i<10;i++) // push_back(elem)在数组最后添加数据 {obj.push_back(i);cout<<obj[i]<<",";    }for(int i=0;i<5;i++)//去掉数组最后一个数据 {obj.pop_back();}cout<<"\n"<<endl;for(int i=0;i<obj.size();i++)//size()容器中实际数据个数 {cout<<obj[i]<<",";}return 0;
}

std::vectorstd::string的意思就是,定义一个向量容器,里面存储的变量类型是string字符串类型。

三、C++ typedef

基本定义:
typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。 在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。

四、C++ &

1.引用

引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。

引用的声明方法:类型标识符 &引用名=目标变量名;

【例1】:int a; int &ra=a; //定义引用ra,它是变量a的引用,即别名

说明:

(1)&在此不是求地址运算,而是起标识作用。

(2)类型标识符是指目标变量的类型。

(3)声明引用时,必须同时对其进行初始化。

(4)引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,且不能再把该引用名作为其他变量名的别名。

ra=1; 等价于 a=1;

(5)声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。故:对引用求地址,就是对目标变量求地址。&ra与&a相等。

(6)不能建立数组的引用。因为数组是一个由若干个元素所组成的集合,所以无法建立一个数组的别名。

2.引用作为参数

引用的一个重要作用就是作为函数的参数。以前的C语言中函数参数传递是值传递,如果有大块数据作为参数传递的时候,采用的方案往往是指针,因为 这样可以避免将整块数据全部压栈,可以提高程序的效率。但是现在(C++中)又增加了一种同样有效率的选择(在某些特殊情况下又是必须的选择),就是引用。

void swap(int &p1, int &p2) //此处函数的形参p1, p2都是引用
{ int p; p=p1; p1=p2; p2=p; }main( )
{int a,b;cin>>a>>b; //输入a,b两变量的值swap(a,b); //直接以变量a和b作为实参调用swap函数cout<<a<< ' ' <<b; //输出结果
}

由【例2】可看出:

(1)传递引用给函数与传递指针的效果是一样的。这时,被调函数的形参就成为原来主调函数中的实参变量或对象的一个别名来使用,所以在被调函数中对形参变量的操作就是对其相应的目标对象(在主调函数中)的操作。

(2)使用引用传递函数的参数,在内存中并没有产生实参的副本,它是直接对实参操作;而使用一般变量传递函数的参数,当发生函数调用时,需要给 形参分配存储单元,形参变量是实参变量的副本;如果传递的是对象,还将调用拷贝构造函数。因此,当参数传递的数据较大时,用引用比用一般变量传递参数的效 率和所占空间都好。

(3)使用指针作为函数的参数虽然也能达到与使用引用的效果,但是,在被调函数中同样要给形参分配存储单元,且需要重复使用"*指针变量名"的 形式进行运算,这很容易产生错误且程序的阅读性较差;另一方面,在主调函数的调用点处,必须用变量的地址作为实参。而引用更容易使用,更清晰。

五、C++ atof

C 库函数 double atof(const char *str) 把参数 str 所指向的字符串转换为一个浮点数(类型为 double 型)。

double atof(const char *str)

示例:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main()
{float val;char str[20];strcpy(str, "98993489");val = atof(str);printf("字符串值 = %s, 浮点值 = %f\n", str, val);strcpy(str, "runoob");val = atof(str);printf("字符串值 = %s, 浮点值 = %f\n", str, val);return(0);

结果:

字符串值 = 98993489, 浮点值 = 98993488.000000
字符串值 = runoob, 浮点值 = 0.000000

六、C++ struct

C++ 数据结构

总结

MOOS程序解析记录(1)相关推荐

  1. MOOS程序解析记录(6)pLogger

    MOOS程序解析记录(6)pLogger 最近在使用数据记录的时候,发现了自己对于PLogger并不是很熟悉,很多语法规则并不是很懂,于是便升起了记录一下该模块的心思,虽然这个模块并不能算多重要,但是 ...

  2. MOOS程序解析记录(7)pMarinePID解析

    MOOS程序解析记录(7)pMarinePID解析 花了一天多的时间,对pMarinePID的源码进行了阅读,这里做一个分析记录,为后面改进控制算法做好基础. 前言 pMarinePID应用程序实现了 ...

  3. MOOS程序解析记录(6)uSimMarine解析2

    MOOS程序解析记录(6)uSimMarine解析2 文章目录 MOOS程序解析记录(6)uSimMarine解析2 前言 一.Simulation of External Drift 1.Exter ...

  4. MOOS程序解析记录(4)

    系列文章目录 本文内容主要整理自中国海洋大学硕士论文<基于MOOS的自主式水下机器人软件系统的设计与实现>作者侯健钊,其AUV系统对我有很大学习指导意义,于是我对自己所需要的部分进行了一定 ...

  5. MOOS程序解析记录(6)uSimMarine解析1

    系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮 ...

  6. 中华英才网爬虫程序解析(2)-多线程threading模块

    欢迎来到爬虫高级兼实战教程,打开你的IDE,开始python之旅吧! threading模块 threading是多线程的一个模块.所谓多线程,就是实现多个线程并发执行的技术. 使用多线程能帮助我们提 ...

  7. 动态更新阿里云DDNS解析记录的IPv6地址,随时随地用域名远程访问自己的电脑【如何远程访问家里的电脑】

    远程访问电脑 日志 简介 要求 1. 获取两台电脑 2.IPv6网络 2.1检查光猫 2.2检查路由器 2.3配置电脑防火墙 2.3.1添加ICMPv6协议 2.3.2配置SMB协议 2.4配置远程桌 ...

  8. iOS富文本解析html图片,小程序解析html和富文本编辑内容【亲测有效】

    首先去 https://github.com/icindy/wxParse 下载wxParse,只拷贝wxParse文件夹即可. 1.引入wxss @import "../../util/w ...

  9. DNS服务器(DNS服务器构建,特殊的解析记录,多域名DNS服务器架构,DNF主从架构,DNS主从数据同步)

    学前提示: 需要两台虚拟机 虚拟机A:主机名位svr7 IP:192.168.4.7 虚拟机B:主机名pc207 IP:192.168.207 一.进行环境的设置 1.修改两台虚拟机的SELinux ...

最新文章

  1. linux 为什么 c语言,为什么C程序里一定要写main函数
  2. C#中子类与父类的相互转换
  3. linux开启ftp
  4. python文件读写用到的库_python 读写txt文件并用jieba库进行中文分词
  5. CentOS7安装笔记:minio分布式集群搭建
  6. oracle父游标和子游标,诊断Oracle high version count(高版本游标)问题
  7. 顶级Javaer,常用的 14 个类库
  8. python arcgis批量绘图_ARCGIS中Python实现批量裁剪
  9. 别乱用了,这才是 SpringBoot 停机的正确方式!!!
  10. gitlab创建分支上传文件_代码管理-gitlab使用方法建议
  11. 20170825阿里在线笔试之菜鸟仓库货架格子编号
  12. 小米随身wifi的linux驱动,小米随身wifi驱动
  13. 关于AD中如何绘制原理图及其封装
  14. JEECG集成flowable
  15. Python随机生成均匀分布在单位圆内的点
  16. Matplotlib颜色对照表
  17. 马云:不要买房了,未来房子如葱!10年后最便宜的是房子车子,而最贵的是…...
  18. Android 计时器实现
  19. lmbench内存延迟测试代码分析
  20. PHP redis 全部命令

热门文章

  1. 关于牛顿-欧拉法的外推和内推的理解
  2. Windows远程桌面 无法进行复制粘贴的问题解决方法
  3. 大专毕业,从6个月开发转入测试岗位的一些感悟——写在测试岗位3年之际
  4. css解决图片底部留白问题
  5. phabricator代码提交自动触发Jenkins token发版(一)
  6. 利用snowfall.jquery.js实现爱心满屏飞或点点满屏飞
  7. 好用的电脑备份软件推荐
  8. 怎么实现CorelDRAW中轮廓图工具的快速运用
  9. java 字符串转pdf_Java pdf转String 并修正格式
  10. 表白公式计算机,表白公式数学公式简单的方式