使用Mat类的好处: (1)不需要手动申请一块内存; (2) 在不需要时不用再手动释放内存; (3)可以通过类的封装,方便的获取到数据的相关信息。 cv::Mat类介绍数据和操作
Mutex 又称互斥量,C++ 11中与 Mutex 相关的类(包括锁类型)和函数都声明在 头文件中,所以如果你需要使用 std::mutex,就必须包含 头文件。 Mutex 系列类(四种) std::mutex,最基本的 Mutex 类。 std::recursive_mutex,递归 Mutex 类。 std::time_mutex,定时 Mutex 类。 std::recursive_timed_mutex,定时递归 Mutex 类。
std::mutex,最基本的 Mutex 类 std::mutex 的成员函数 1.构造函数,std::mutex不允许拷贝构造,也不允许 move 拷贝,最初产生的 mutex 对象是处于 unlocked 状态的。 2. lock(),调用线程将锁住该互斥量。线程调用该函数会发生下面 3 种情况:(1). 如果该互斥量当前没有被锁住,则调用线程将该互斥量锁住,直到调用 unlock之前,该线程一直拥有该锁。(2). 如果当前互斥量被其他线程锁住,则当前的调用线程被阻塞住。(3). 如果当前互斥量被当前调用线程锁住,则会产生死锁(deadlock)。 3. unlock(), 解锁,释放对互斥量的所有权。 4. try_lock(),尝试锁住互斥量,如果互斥量被其他线程占有,则当前线程也不会被阻塞。线程调用该函数也会出现下面 3 种情况,(1). 如果当前互斥量没有被其他线程占有,则该线程锁住互斥量,直到该线程调用 unlock 释放互斥量。(2). 如果当前互斥量被其他线程锁住,则当前调用线程返回 false,而并不会被阻塞掉。(3). 如果当前互斥量被当前调用线程锁住,则会产生死锁(deadlock)。
2.线程的同步(unique_lock的使用)
unique_lock中的unique表示独占所有权。 unique_lock独占的是mutex对象,就是对mutex锁的独占。 用法: (1)新建一个unique_lock 对象 (2)给对象传入一个std::mutex 对象作为参数; std::mutex mymutex; unique_lock lock(mymutex);
因此加锁时新建一个对象lock unique_lock lock(mymutex); 而这个对象生命周期结束后自动解锁。 参考网址
总是会有默认的构造器,不会进行动态内存分配,也不会初始化矩阵元素。
Matrix3f a; MatrixXf b;这里,a是一个33的元素,其中还有一个float[9]数组,其中的元素没有初始化;b是一个动态大小的矩阵,目前的大小是00,它的元素数组完全没有分配。 构造器中全入大小的构造器也是有的,行是先传入的。对于向量,直接传入向量大小。他们会分配元素数组,但是不会初始化元素。
MatrixXf a(10,15); VectorXf b(30);这里,a是10x15动态矩阵,数组内存已经分配,但是没有初始化;b是一个大小为30的向量,数组内存已经分配,但是元素没有初始化。 为了提供统一的API ,在固定类型的矩阵上指定大小也是合法的,例如:
Matrix3f a(3,3);最后,我们提供了一些便捷方式为小的大小的向量元素提供初始化方法: Vector2d a(5.0, 6.0); Vector3d b(5.0, 6.0, 7.0); Vector4d c(5.0, 6.0, 7.0, 8.0);
访问cv::image元素的方法:
使用at成员函数 使用ptr指针访问 使用迭代器iterator
参看
函数: 1.push_back() 在vector类中作用为在vector尾部加入一个数据。string中也有这个函数,作用是字符串之后插入一个字符。
C++之Stack容器 stack是堆栈容器,是一种“先进后出”的容器 加头文件 #include <stack> stack采用模板类实现, stack对象的默认构造形式: stack stkT; 实例:stack record; //一个存放int的stack的容器,容器对象名为record。 < >尖括号中还可以设置指针类型或自定义类型 具体函数作用: stack.push(elem); //往栈头添加元素 stack.pop(); //从栈头移除第一个元素
at函数的使用 例如:p是三行一列的矩阵 p.at(0,0); p.at(0,0);和p(0,0),只不过前者会检查是否越界(因此花费的时间稍多),而后者不会(后者越界会导致未定义行为)。
sort()函数:对数组进行排序 sort()函数在algorithm头文件中,存储在std命名空间中。 加头文件#include<algorithm> sort()函数有三个参数:第一个是数组的起始地址;第二个是数组的结束地址;第三个是如何排序(从大到小或从小到大)。默认是从小到达 参考链接
size_t和ssize_t是ANSI C提供的标准头文件里定义的一个“数据类型”,其实并不是新的数据类型,不是关键字,是通过typedef从已有数据类型定义而来。
#define __size_t #endif #ifndef __SIZE_TYPE__ #define __SIZE_TYPE__ long unsigned int #endif #if !(defined (__GNUG__) && defined (size_t)) typedef __SIZE_TYPE__ size_t;size_t实际上是无符号长整型,在32位系统上位32位,在64位系统中位64位。 它是一种“整型”类型,里面保存的是一个整数,就像int, long那样。这种整数用来记录一个大小(size)。size_t的全称应该是size type,就是说“一种用来记录大小的数据类型”。 通常我们用sizeof(XXX)操作,这个操作所得到的结果就是size_t类型。 因为size_t类型的数据其实是保存了一个整数,所以它也可以做加减乘除,也可以转化为int并赋值给int类型的变量。 参考链接