本文参考自这篇文章,由于其贴出来的代码运行效率较低而且不太符合本人的想法和习惯,所以对其进行了算法的重新设计和代码的重写。 所谓图像的连通域,指的是图像上像素点值相同或者相近的点两两相邻接所组成的一块区域。而对于邻接,有四邻接和八邻接两种,如下:四邻接 八邻接 上图所示的‘O‘与‘X’相邻接,本文采取的是4邻接方式。 在查找图像连通域的时候,一般都需要经过一个二值化的过程,将图像的像素值简化成非...
大小写转换和性能 前言本文主要讨论最基本的一些大小写转换函数和API,不讨论一些常见的字符串程序库里面的大小写转换接口,另外本文的落脚点是这些转换函数的性能和日常开发中遇到的一些问题。 不考虑范围其实ctype.h里面有定义一套宏,就是不考虑字符是否落在A-Z,a-z范围,直接计算(直接用加减法或者使用位与或计算,差别不是很大)。显然这样的效率是最高的,但是使用可能是有问题的,遇到中文或者其他友邦的一些字符,可能...
练习7.16没有,一个类可以有0个或多个访问说明符,而且对于某个访问说明符能出现多少次也没有严格限定;定义在public说明符之后的应该是程序的接口,即是成员函数的一些声明,还有一些构造函数;定义在private后的应该是数据成员和某些成员函数的定义;练习7.17有,class和struct的区别在于两者默认的访问权限不同,class默认的访问权限是private,struct则相反;练习7.18封装的意义在于将一些成员函数的定义和数据成员隐藏起来,只...
使用void(Student::*pwho) void = & Student::who // 构造函数指针使用string Student::*p_name = & Student::m_name //构造变量指针 #include <iostream>
#include <cstdio>usingnamespace std; class Student{
public:Student(conststring& name):m_name(name){} void who(void){cout << "学生的名字是" << m_name << endl; }string m_name;
}; int main() {//成员函数指针void(Student::*pwho)(void) = &Student::who; //成员变...
最近在Bilibili上看到不少侯捷老师C++的视频教程,侯捷老师翻译了很多C++的经典书籍,比如《Essential C++中文版》、《STL源码剖析》,也写了《深入浅出MFC 第二版》。使用到multiset这个关联容器时,本来以为Visual Studio2017中会提供#include <multiset>这个头文件,没想到加入到显示错误,后来查了下资料,说是multiset只是set的一个特例而已,只需要包含set的头文件即可,使用#include<set>即可。使用multimap时是也是类似的,...
STL中的priority_queue(优先队列)是一种会按照自定义的一种方式(数据的优先级)来对队列中的数据进行动态的排序的容器,不同优先级的情况下,top()上永远是最高优先级的数据,其底层采用的是堆结构(默认大顶堆)。注意相同优先级下并没有先进先出,后面的例子中可以看到 头文件#include<queue> 标准库默认使用元素类型的<操作符来确定它们之间的优先级关系,数据越大优先级越高,想要改变优先级的界定方式的话需要重载<操作符。...
c++(多态)父类的引用或者指针,指向子类对象#include <iostream>
using namespace std;class Animal{
public://动态连遍,在父类声明函数上,变成虚函数,发生了多态 virtual void speak(){ cout<<"动物在说话"<<endl;}
};
class Cat :public Animal
{
public:void speak(){ cout<<"小猫在说话"<<endl;}
};
//静态连遍,编译阶段就确定好了地址,没有加virtual关键字
void dospeak(Animal &animal)
{animal.speak();
}
voi...
最近在做图卷积相关的实验,里面涉及到图采样,该过程可以抽象为:从一个包含n个节点,m条边的图中根据一定规则采样一个连通图。由于实验使用的是FB15k-237数据集,共包含14541个节点,272115条边,每次采样30000条边,采样一次需要8s,这对于深度学习实验来说是难以接受的,会导致GPU长时间空闲。因此我开始尝试使用C/C++优化代码,虽然最后优化效果不行,但是也是对python调用C代码的一次学习,因此在此纪录一下。Python原代码 de...
最近一直都在x86设备上进行游戏开发,就c++层和Android java层倒没有什么要特别注意的(除了需要注意一下修改Application.mk指定平台外),在c++崩溃的时候,很多时候看不到堆栈,只能看到一个信号,所以由于工作需要,使用google breakpad来进行异常捕捉。谷歌被墙很麻烦,索性就把breakpad打包放这里供需要的童鞋下载,google breakpad下载。1.下载google breakpad下载地址是 http://code.google.com/p/google-breakpad/source/...
VC6.0部分快捷键第一部分F1:如果安装了MSDN则启动MSDN,如果还选择了某一条件则在MSDN中搜索这一条件。不然启动windows帮助和支持F2:切换书签Ctrl+F2:当前行设置为书签Alt+F2:当前源文件设置为书签F3:向下继续搜索已编辑的搜索条件Ctrl+F3:向下继续搜索已编辑的搜索条件Alt+F3:打开搜索对话框Shift+F3:向上继续搜索已编辑的搜索条件F4:当编译报错时,可定位到错误代码行Ctrl+F4:关闭当前代码编辑窗口Alt+F4:关闭VC6F5:...
vector的size和capacityreserve 与 resize 是区别的:reserve 用来给vector预分配存储区大小,即capacity的值
,没有给这段内存进行初始化。reserve
的参数是推荐预分配内存的大小,实际分配的可能等于或大于这个值。这样做的好处就是消除当往vector插入数据时,size 超过原来的默认分配的capacity值时
所带来的 内存重分配开销。resize 不仅会改变vector的capacity大小,而且会重置size值,在C++ STL中,很多部分(目前包括set,...
当年接触的第一门计算机语言是C,知道其是结构化程序语言、执行效率高、适合比较偏底层的软件开发......虽然之后也学过C++,探讨过C++存在的必要性(自然跟C无法适应一些情况有关),但因为眼界或经历受限,始终无法理解C++优于C的地方。因此,在以后的学习、开发过程中,总是优先考虑使用C,一致对C++的使用几乎为零,对外也不敢宣称自己熟悉C++。这种状态一直持续了本科直至现在研究生阶段度过大半,都依然自我感觉良好!!! ...
c++ goto 语句的使用1.定义一个类似标签的东西lable2.使用goto关键字,跳转到lable, goto lable 1 #include <iostream>2 #include <string>3 #include <stdlib.h>4 #include <stdio.h>5 6 7 #include "header3.h" 8 9usingnamespace std;
10void swap(int&, int&);
11//void swap(int, int);1213int main(){
14bool flag = true;
1516lable:
17 cout<<"hello world!"<<endl;
1819if(flag){
20 flag = !flag;
21goto la...
#include <iostream>#include <windows.h>#include <mutex>std::mutex gmutex;
usingnamespacestd;template<typename Type>
class Singleton
{
public:static Type* GetSingleton(){ if (siglen == NULL){unique_lock<std::mutex> lock(gmutex);//C++11加锁。if (siglen == NULL){siglen = new Type();Type *temp = new Type();MemoryBarrier();siglen = temp;}}return siglen;}
private:static Type* siglen;
};template<typena...
第三章1.头文件不应包含using声明,因为头文件的内容会拷贝到所有引用它的文件中去。2.初始化string对象的方式:string s1; //默认初始化,s1是一个空串string s2(s1); //s2是s1的一个副本string s2=s1; //等价于s2(s1)string s3("value"); //s3是字面值"value"的副本,除了字面值最后那个空字符外string s3="value"; //等价于s3("value")string s4(n,‘c‘); //把s4初始化为由连续n个字符c组成的串用等号初始化...