C++基本语法

C++基本语法,第1张

文章目录
  • 数据类型定义
    • 结构体
    • 数组
    • 列表和循环
    • 二维点和三维点
  • 指针和引用
  • 文件类型
    • 头文件
  • 常见运算
    • 逻辑运算
    • 连续不等式
    • 浮点运算
    • 字符串 *** 作
  • 常见报错及解决方法

数据类型定义 结构体
// 定义一个结构体
struct struct1{
float abclass="superseo">c;
}
数组
// 定义一个数组,每个元素是一个结构体
std::Vector<struct1> list1; 
// 定义一个数组,每个元素是一个浮点数
std::Vector<float> list1; 
列表和循环
//定义列表
//list和vector的区别:vector是一段连续存储空间,存取速度欧1,list是欧n
std::vector<float> list1;
//定义一个固定长度列表(长度为5),并且将元素初始化为相同的值 (1)
std::vector<float> list1 = std::vector<float>(5,1)
//手动创建列表
std::vector<float> list1 {1,2,3,4,5};
//按列表循环1
for (i=0;i<list1.size();i++){xxx}
//按列表循环2
for (auto &i:list1){xxx}
二维点和三维点
#include "Eigen/Core"
// 定义2D点,初始化
typedef Eigen::Vector2f Point2Df;
Point2Df point(0,0);

// 定义2D点向量,2个点
template <typename T>
struct Point2D {
T x=0;
T y=0;
};
using Point2DF = Point2D<float>
std::vector<base::Point2DF> point_list = {{0,0},{0,0}}

// 定义3D点,初始化
Eigen::Vector3d point = Eigen::Vector3d(0,0,0)
// 定义3D点向量, 4个点
std::vector<Eigen::Vector3d> point_list = std::vector<Eigen::Vector3d>(4,Eigen::Vector3d(0,0,0))
指针和引用
// 根据地址取值,abc是一个地址(引用),存储了一个int值,打印地址
abc
// 把值取出来,并打印值
static_cast<int>(abc)
文件类型
// 不同的文件类型和作用:
配置:abc.pt
对外接口:abc.proto
对外接口编译自动产生的头文件:abc.pb.h
源代码:abc.cc
头文件(和源代码对应):abc.h
头文件
// 引入头文件,必须用双引号括起相对路径,不能用单引号,C++单引号表示char。错误写法:#include 'abc/def/ggg.h'
#include "abc/def/ggg.h"
// .cc 或 .cpp 文件中用到的变量名xxx (private,私有成员变量) 需要在同名的 .h 文件中定义,一个.cc文件对应一个.h文件。
// 在 .cc 中引用非同名的 定义了变量名xxx (private)的.h文件是没用的。会报错:
error: 'xxx' was not declared in this scope
常见运算 逻辑运算
// 逻辑运算
// 多条件取或
if (a || b || c) {xxx}
// 多条件取与:使用 && ,而不要使用 & (按位与、取地址)
if (!a && !b && !c) {xxx}
连续不等式
// 连续比较(连续不等式)

C++不像python,不能使用连续比较:
比如想知道b是否在a和c之间,不能写成:

a < b < c

而是应该写成:

a < b && b < c

原因是:C++中 连续不等式存在优先级问题,第二种写法:a

python可以。

0 < 1 < 3 # 会返回True

这可以说是C++语言标准的缺陷

https://book.51cto.com/art/201204/327024.htm
https://ac.nowcoder.com/discuss/291157?type=1

浮点运算
// 浮点判等
assert(fabs(a-b)<1.0e-6);
// 浮点转字符串
std::to_string(1.234)
// 浮点数位数截取 (目前没有发现好的方法,采用先乘后除),https://blog.csdn.net/ojshilu/article/details/21634765
#include 
floor(1.23456*100)/100 // 小数点后保留两位小数
字符串 *** 作
// 字符串位数截取,截取前四个。https://blog.csdn.net/liuweiyuxiang/article/details/50838349
string "ABCD".substr(0,4)
// 字符串拼接
// 不能字符串定义时直接做多字符串拼接
std::string ccc = "a" + "c"; // 会报错:error: invalid operands of types 'const char [2]' and 'const char [2]' to binary 'operator+'
// 需要先定义字符串变量,然后再拼接(定义时拼接或单独拼接)
std::string a = "a";
std::string ccc = a + "b"; // 定义时拼接
// 单独拼接
std::string a = "a";
std::string b = "b";
std::string ccc = a + b;
常见报错及解决方法
  1. terminate called after throwing an instance of ‘std::out_of_range’
  2. fatal error: opencv/cv.h: No such file or directory
  3. caffe 相关编译问题及解决

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/788630.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-05
下一篇2022-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存