const

Qt 使用自定义的数据类型作为QMap的Key(Class)

天大地大妈咪最大 提交于 2020-03-08 06:36:48
由于项目需要,有大量数据需要存入QMap中进行调用,而每个存入的数据包含:方位角度、距离、高度 因此我自定义数据类型PointData,为了让自定义数据能放入QVariant中,因此对自定义的数据类型PointData使用宏Q_DECLARE_METATYPE QMap<key,value>中数据存入时会对存入数据进行比较,并按照比较后的顺序进行排序存储,因此需要重载运算< 为方便调试输入调试信息,我同时重载了运算符<<,输入QDebug信息。 先看PointData数据类型: PointData.h #ifndef POINTDATA_H #define POINTDATA_H #include <QMetaType> #include <QDebug> class PointData { public: PointData(); PointData(const PointData& other); ~PointData(); PointData(const int &azimuth, const int &distance,const int& height); int azimuth() const; int distance() const; int height() const; int Azimuth; int Distance; int Height; private

ES6新特性1:let和const

痴心易碎 提交于 2020-03-08 05:29:40
本文摘自 ECMAScript6入门 ,转载请注明出处。 一、 let   1. ES6增了 let 命令,用来声明变量。它的用法类似于 var ,但是所声明的变量,只在 let 命令所在的代码块内有效。 { let a = 10; var b = 1; } a // ReferenceError: a is not defined. b // 1      2. let 不像 var 那样会发生“变量提升”现象。所以,变量一定要在声明后使用,否则报错。 console.log(foo); // 输出undefined console.log(bar); // 报错ReferenceError var foo = 2; let bar = 2;   3. 暂时性死区:只要块级作用域内存在存在 let 和 const 命令,它所声明的变量就“绑定”在这个区域,形成封闭作用域,不再受外部的影响。凡是在声明之前就使用这些变量,就会报错。 var tmp = 123; if (true) { tmp = 'abc'; // 报错ReferenceError let tmp; }   4. let不允许在相同作用域内,重复声明同一个变量。因此,也不能在函数内部重新声明参数。 //用let声明以后,再用var或let声明都报错 function () { let a = 10; var a =

c++实验9 图及图的操作实验

我的梦境 提交于 2020-03-08 04:24:49
实验9 图及图的操作实验 --博客后半部分有程序的所有代码-- 1、图邻接矩阵存储结构表示及基本操作算法实现 (1)邻接矩阵存储结构类定义: #include "SeqList.h" //包含动态数组结构的顺序表类 #include "SeqQueue.h" //包含静态数组结构的顺序队列类 typedef char VerT; //定义邻接矩阵图类中的VerT class AdjMWGraph { private: SeqList Vertices; //顶点顺序表 int Edge[MaxVertices][MaxVertices]; //边权值数组 double numOfEdges; //边的个数 void DepthFirstSearch(const int v, int visited[]); void BroadFirstSearch(const int v, int visited[]); public: AdjMWGraph(const int sz=MaxVertices); //构造函数 ~AdjMWGraph(void){}; //析构函数 int NumOfVertices(void) //取顶点个数 {return Vertices.Size();} int NumOfEdges(void) //取边的个数 {return numOfEdges;}

C++ Vector 中自定义对象的排序

馋奶兔 提交于 2020-03-08 02:58:00
需求: 客户端收到游戏中的所有联盟列表,现在需要按联盟的属性比如lv来进行排序。 数据存储: 每个联盟数据是一个对象,所有的联盟列表存在一个vector容器里面。 老的解决方法: 冒泡排序方法算法 新的方法: 参考 http://blog.csdn.net/aastoneaa/article/details/8471722 ,总结使用C++自带的std::sort函数。 详细方法: 军团对象,定义了军团的各种简单属性 class AllianceData { public: AllianceData(); ~AllianceData(); std::string uid;//唯一key std::string aname;//名称 nv_uint32 num;//成员总数 nv_uint32 alv;//等级 }; 定义用来比较的函数对象,我们命名为CompHelper.h #ifndef _CompHelper_H_ #define _CompHelper_H_ #include "AllianceData.h" //升序排列 class CompLess { public: bool operator ()(const AllianceData& pstItem1, const AllianceData pstItem2) { return pstItem1.alv <

NENUACM 2020 复健训练 #4 题解

白昼怎懂夜的黑 提交于 2020-03-08 02:31:52
题目链接 Search for Pretty Integers 题意:给你两行数(均是个位数),第一行有n个数,第二行有m个数,让你构造一个最小的数满足至少包含一个第一行里的数且至少包含一个第二行里的数。 思路:显然,如果两行数里有相同的数,那么答案就是这些相同的数里的最小值;否则,以第一行里的数为十位数,以第二行里的数为个位数枚举,然后以第二行里的数为十位数,以第一行里的数为个位数枚举,取最小值即可。 #include<bits/stdc++.h> #define mem(a,b) memset((a),b,sizeof(a)) #define de cout<<endl<<endl<<endl typedef long long ll; const int inf=0x3f3f3f3f; const int maxn=1e5+10; using namespace std; int a[15],b[15]; int main() { int n,m; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<=m;i++) scanf("%d",&b[i]); int ans=100; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if

队列

▼魔方 西西 提交于 2020-03-07 23:21:23
队列 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。 单队列(queue) 在C++中只要#include即可使用队列类,其中在面试或笔试中常用的成员函数如下(按照最常用到不常用的顺序) push() :从队尾压入 pop() : 从队头弹出 size() :返回队列的元素个数 empty() :判断队列是否为空,为空返回true,反之返回false front() :返回队头的元素,就是最先压入的元素 back() :返回队尾的元素,就是最后压入的元素 双端队列(deque,全名double-ended queue) 是一种具有队列和栈的性质的数据结构,即可(也只能)在线性表的两端进行插入和删除。deque类常用的函数如下: (1) 构造函数 deque():创建一个空deque deque(int nSize):创建一个deque,元素个数为nSize deque(int nSize,const T& t):创建一个deque,元素个数为nSize,且值均为t deque(const deque &):复制构造函数 (2) 增加函数 void push_front(const T& x):双端队列头部增加一个元素X

C++:lower_bound 和 upper_bound

天涯浪子 提交于 2020-03-07 20:56:02
C++:lower_bound 和 upper_bound 1. set , map, multiset, multimap 原型: iterator lower_bound ( const value_type & val ) const ; iterator upper_bound ( const value_type & val ) const ; pair < iterator , iterator > equal_range ( const value_type & val ) const ; lower_bound返回的是第一个 >= val 的迭代器 upper_bound返回的是第一个 > val 的迭代器 equal_range 返回的是lower_bound、upper_bound构成的上下限的迭代器区间 实例: struct Y { int y , id ; bool operator < ( Y tmp ) const // 方式1 { //注意const 第一个小于第二个 return y < tmp . y ; } } ; set < Y > s ; set < Y > :: iterator it ; it = s . upper_bound ( m ) ; //此处的查找是按照Y中的实例比较的 二分查找 2. 二分查找 头文件:algorithm -

团体程序设计天梯赛 L1-058 6翻了

烂漫一生 提交于 2020-03-07 19:29:02
L1-058 6翻了 题目链接-L1-058 6翻了 解题思路 思路1 for遍历字符串,记录查询由‘6’开头,查到后进行cnt++,判断有几个‘6’,如果9个‘6’以上的就直接输出‘27’,大于3个‘6’输出‘9’,否则输出cnt个‘6’,若不是由‘6’开头就直接输出s[i]即可 三目运算符可真香,小声bb 归纳一下 a ? b : c; 如果a为真,则执行b,否则执行c 函数 string(n,'c') 的功能是:返回由n个字符c组成的字符串 附上代码 # include <bits/stdc++.h> # define int long long # define lowbit(x) (x &(-x)) using namespace std ; const int INF = 0x3f3f3f3f ; const double PI = acos ( - 1.0 ) ; const double eps = 1e-10 ; const int M = 1e9 + 7 ; const int N = 1e5 + 5 ; typedef long long ll ; typedef pair < int , int > PII ; string s ; signed main ( ) { ios :: sync_with_stdio ( false ) ; cin . tie

黑幕背后的Autorelease

只愿长相守 提交于 2020-03-07 18:33:52
http://blog.sunnyxx.com/2014/10/15/behind-autorelease/ 我是前言 Autorelease机制是iOS开发者管理对象内存的好伙伴,MRC中,调用 [obj autorelease] 来延迟内存的释放是一件简单自然的事,ARC下,我们甚至可以完全不知道Autorelease就能管理好内存。而在这背后,objc和编译器都帮我们做了哪些事呢,它们是如何协作来正确管理内存的呢?刨根问底,一起来探究下黑幕背后的Autorelease机制。 Autorelease对象什么时候释放? 这个问题拿来做面试题,问过很多人,没有几个能答对的。很多答案都是“当前作用域大括号结束时释放”,显然木有正确理解Autorelease机制。 在没有手加Autorelease Pool的情况下,Autorelease对象是在当前的 runloop 迭代结束时释放的,而它能够释放的原因是 系统在每个runloop迭代中都加入了自动释放池Push和Pop 小实验 __weak id reference = nil;- (void)viewDidLoad { [super viewDidLoad]; NSString *str = [NSString stringWithFormat:@"sunnyxx"]; // str是一个autorelease对象

黑幕背后的Autorelease

☆樱花仙子☆ 提交于 2020-03-07 18:33:17
原创文章,原地址: blog.sunnyxx.com 我是前言 Autorelease机制是iOS开发者管理对象内存的好伙伴,MRC中,调用 [obj autorelease] 来延迟内存的释放是一件简单自然的事,ARC下,我们甚至可以完全不知道Autorelease就能管理好内存。而在这背后,objc和编译器都帮我们做了哪些事呢,它们是如何协作来正确管理内存的呢?刨根问底,一起来探究下黑幕背后的Autorelease机制。 Autorelease对象什么时候释放? 这个问题拿来做面试题,问过很多人,没有几个能答对的。很多答案都是“当前作用域大括号结束时释放”,显然木有正确理解Autorelease机制。 在没有手加Autorelease Pool的情况下,Autorelease对象是在当前的 runloop 迭代结束时释放的,而它能够释放的原因是 系统在每个runloop迭代中都加入了自动释放池Push和Pop 小实验 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 __weak id reference = nil; - (void)viewDidLoad { [super viewDidLoad]; NSString *str = [NSString stringWithFormat:@"sunnyxx"]; //