作者: 邓小猪
博客:https://blog.youkuaiyun.com/qq_35210586
知乎:https://www.zhihu.com/people/dengxiaozhu/activities
2019 年 4 月 15 日
文章目录
opencv官方文档
https://docs.opencv.org/2.4/index.html
!(a||b) 和!a&&!b 等价
证明如下:
- a = 0, b = 0时, a || b == 0, !(a || b) == 1, !a && !b == 1
- a = 0, b = 1时, a || b == 1, !(a || b) == 0, !a && !b == 0
- a = 1, b = 0时, 和2相同
- a = 1, b = 1时, a || b == 1, !(a || b) == 0, !a && !b == 0
vector的用法
https://www.cnblogs.com/Nonono-nw/p/3462183.html
set的用法
https://www.cnblogs.com/zyxStar/p/4542835.html
example1:set的insert操作
set的单元素插入返回一个二元组(Pair)。成员 pair::first 被设置为指向新插入元素的迭代器或指向等值的已经存在的元素的迭代器。成员 pair::second 是一个 bool 值,如果新的元素被插入,返回 true,如果等值元素已经存在(即无新元素插入),则返回 false。
因为在 set 中元素的主键是唯一的,当前插入操作将会检测被插入元素是否等于容器中某个已存在元素,如果是,新的元素将不会被插入,且返回指向这个等值的已经存在的元素(如果当前函数有返回值)。
所以set.insert(xx).second是用来确认set元素是否成功插入的标识,也可以用来确认该元素之前没有被插入也没有被处理过。
#include "stdafx.h"
#include <iostream>
#include <set>
using namespace std;
int main()
{
set<int> s;
s.insert(1);
//返回值为pair<set<int>::iterator, bool>
//迭代器表示该元素的位置
pair<set<int>::iterator, bool> p;
p=s.insert(1);
cout << *p.first << endl;
cout << p.second << endl;
//输出1 和 0
p=s.insert(2);
cout << *p.first << endl;
cout << p.second << endl;
//输出2 和 1
getchar();
}
example2:lower_buond&upper_bound
#include<set>
#include<iostream>
using namespace std;
int main()
{
set<int>s;
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
s.insert (x);
}
set<int>::iterator it;
for(it=s.begin ();it!=s.end ();it++)
{
printf("%d\n",*it);
}
//s.end()没有值
cout<<"s.begin() "<<*s.begin ()<<endl;
//lower_bound()--返回指向大于(或等于)某值的第一个元素的迭代器
cout<<"lower_buond 3 "<<*s.lower_bound (3)<<endl;
//upper_bound()--返回大于某个值元素的迭代器
cout<<"upper_bound 3 "<<*s.upper_bound (3)<<endl;
//find()--返回一个指向被查找到元素的迭代器
cout<<"find() 3 "<<*s.find (3)<<endl;
cout<<"s.size() "<<s.size ()<<endl;
return 0;
}
结果为:
补充:STL之std::set、std::map的lower_bound和upper_bound函数使用说明
https://www.cnblogs.com/tocy/p/STL_lower_bound_intro.html
map中的first和second
map<string, int> m;
m[“one”] = 1;
map<string, int>::iterator p = m.begin();
p->first; // 这个是 string 值是 “one”
p->second; //这个是 int 值是 1
break和continue的区别
break
1.break 语句可用于跳出循环。
2.break所在的循环体已经结束。
continue
1.continue 语句中断循环中的迭代,如果出现了指定的条件,然后继续循环中的下一个迭代。
2.continue所在的循环体并没有结束。
demo演示
for (i=0;i<5;i++)
{
if (i==3) break;
x=x + "The number is " + i + "<br>";
}
// 只输出 0 , 1 , 2 , 到3就跳出循环了
---
for (i=0;i<=5;i++)
{
if (i==3) continue;
x=x + "The number is " + i + "<br>";
}
// 不输出3,因为continue跳过了,直接进入下一个迭代
do…while(0)的用法
https://www.jianshu.com/p/99efda8dfec9
函数的返回值
按一般程序开发惯例,解释如下:
return 0; 函数返回0表示成功完成本函数
return -1;执行该函数失败!
以上两个是约定俗成,系统提供的函数绝大部分定义为int类型返回值的都是这样的!
布尔类型返回:
return 0;返回假
return 1; 返回真
一般这样的函数用来实现一个判断是否的逻辑,或检查有无的数据。返回真表示“是”,返回假表示“否”!如:isalpha()判断是否是字母 isdigit()判断是否是数字
new int 和 new int()的区别???
int *p=new int;——分配一个int型变量所占大小的空间,并将首地址赋给int *型指针p。
int *p=new int[10];——分配一个有10个int型元素的数组所占空间,并将该数组的第一个元素的地址赋给int *型指针p。
int *p=new int(10);——分配一个int型变量所占大小的空间,在其中放入十进制数10,并将首地址赋给int *型指针p。
https://blog.youkuaiyun.com/zwz2011303359/article/details/80871050
https://blog.youkuaiyun.com/zjcxhswill/article/details/50641348
图像通道分离与合并——cv::split()与cv::merge()详解
https://blog.youkuaiyun.com/guduruyu/article/details/70837779
cv::Mat类
初始化的具体例子:http://blog.sina.com.cn/s/blog_79bb01d00101ao58.html
基本用法:https://blog.youkuaiyun.com/qq_37406130/article/details/78725406
opencv Mat 数据 最大值和最小值
https://blog.youkuaiyun.com/tianzhaixing2013/article/details/21390505