C++灰灰的日常查漏补缺

本文介绍了C++中的一些重要概念,包括成员访问的区别、文件输出操作、矩阵相乘的两种方法、迭代器的使用以及STL容器的特性。详细讲解了vector、list、deque的实现原理和操作,强调了不同容器在插入、删除和访问速度上的差异,并对关联式容器如map和multimap进行了说明。最后,阐述了迭代器的不同类型及其在STL中的作用。
摘要由CSDN通过智能技术生成

1.c++中 . 和 -> 主要是用法上的不同。

    A.B则A为对象或者结构体;

    A->B则A为指针,->是成员提取,A->B是提取A中的成员B,A只能是指向类、结构、联合的指针;

2.写输出文件

#include<iostream>

        ofstream f;
        f.open("地址/想要创建的文件名及文件类型如:pose_array.txt");
        f << fixed; 
        此处是循环体,循环存入数据
        f.close();

3.C++中的矩阵相乘

   Mat矩阵dot——A.dot(B)

Opencv中.dot操作才算得上是真正的“点乘”,A.dot(B)操作相当于数学向量运算中的点乘,也叫向量的内积、数量积。

对两个向量执行点乘运算,就是对这两个向量对应位一一相乘之后求和的操作,点乘的结果是一个标量。 

对于向量a和向量b:

      

a和b的点积公式为:

要求向量a和向量b的行列数相同。

Mat矩阵的dot方法扩展了一维向量的点乘操作,把整个Mat矩阵扩展成一个行(列)向量,之后执行向量的点乘运算,仍然要求参与dot运算的两个Mat矩阵的行列数完全一致。

dot方法声明中显示返回值是double,所以A.dot(B)结果是一个double类型数据,不是Mat矩阵,不能把A.dot(B)结       果赋值给Mat矩阵!

Mat矩阵mul——A.mul(B)

Opencv中mul会计算两个Mat矩阵对应位的乘积,所以要求参与运算的矩阵A的行列和B的行列数一致。计算结果是跟A或B行列数一致的一个Mat矩阵。

以简单的情况为例,对于2*2大小的Mat矩阵A和B:

对A和B执行mul运算:

 

mul操作不对参与运算的两个矩阵A、B有数据类型上的要求,但要求A,B类型一致,不然报错;

Mat AB=A.mul(B),若声明AB时没有定义AB的数据类型,则默认AB的数据类型跟A和B保存一致

若AB精度不够,可能产生溢出,溢出的值被置为当前精度下的最大值;

4.iterator   begin(),end(),*first,*last

#include <iterator>

std::vector<int> IntVector;

std::vector<int>::iterator first=IntVector.begin();

// begin()得到指向vector开头的Iterator,*first得到开头一个元素的值

std::vector<int>::iterator last=IntVector.end();

// end()得到指向vector结尾的Iterator,*last得到最后一个元素的值

5. STL

1.容器

STL容器,即是将最常运用的一些数据结构(data structures)实现出来。容器是指容纳特定类型对象的集合。根据数据在容器中排列的特性,容器可概分为序列式(sequence)和关联式(associative)两种。迭代器是一种检查容器内元素并遍历元素的数据类型。它提供类似指针的功能,对容器的内容进行访问。

1.1序列式容器

序列式容器中的元素都可序(ordered),但未必有序(sorted)。数组为C++语言内置的序列容器,STL另外提供vector、list、deque(double-ended queue)。它们的差别在于访问元素的方式,以及添加或删除元素相关操作的运行代价。 
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值