自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(69)
  • 收藏
  • 关注

转载 易分辨的数据可视化配色方案

最近在做一个数据资源可视化的项目,需要用到多重线条的配色方案,这里选取了一些视觉上易分辨,搭配起来不至于太不违和的颜色,记录一下。有做类似项目的同学可以自取,这个是QColor是QT的颜色类型,采用RGB色值初始化,颜色标注可能不是很准确,自行尝试吧{ QColor(255, 0, 0) // 红 , QColor(0, 255, 0) // 绿 , QColor(0, 0...

2018-09-28 15:46:00 432

转载 【共读Primer】64.[7.3]类类型 Page249

类类型对于类来说每个类的定义都是唯一的类型,即使两个类的成员完全一样,他们仍然是不同的类型struct First{ int memi; int getMem(){return memi;};};struct Second{ int memi; int getMem(){return memi;};};F...

2018-09-20 09:00:00 98

转载 【共读Primer】63.[7.3]类的其他特性 Page243

类型成员class Screen{public: typedef std::string::size_type pos; // 类型成员 //using pos = std::string::size_type; // C++11 风格的类型别名定义,与上一行效果一致private: pos cursor = 0; pos h...

2018-09-19 09:18:00 107

转载 【共读Primer】62.[7.2]访问控制与封装 Page240

上一节中定义的Sales_data,使用者可以任意访问和修改所有的内部变量。而这与对象设计理念中的封装性是不符合的struct Sales_data{ Sales_data() = default; Sales_data(const std::string &s) : bookNo(s){} Sales_data(const std:...

2018-09-14 10:13:00 87

转载 【共读Primer】61.[7.1]自定义类型--构造、拷贝、赋值、析构 Page235

Sales_data total;if(read(cin, total)){ Sales_data trans; while(read(cin, trans)) { if(total.isbn() == trans.isbn()) { total.conbine(trans); ...

2018-09-12 11:44:00 74

转载 【共读Primer】60.[7.1]定义抽象数据 类 Page227

类本章的内容是类, 类是数据的抽象和封装。定义一个抽象数据类型我们在前面使用过Sales_item类型,但是并没有过多的讲述这个类型。现在我们来讲Sales_data类型改造为支持Sales_item的一个操作集合。我们需要完成的操作如下:1. isbn,用来返回对象编号。2. combine ,用来代替Sales_item的 += 操作符3. add ,...

2018-09-12 09:57:00 99

转载 【共读Primer】59.[6.7]函数指针 Page221

什么是函数指针bool lengthCompare(const string &, const string &);// 函数指针pf,指向一个返回值为bool类型,参数为两个string引用的函数bool (*pf)(const string &, const string &); // 这是一个函数指针// 函数pf, 返回值为...

2018-09-11 10:51:00 81

转载 【共读Primer】58.[6.5]参数匹配 Page217

一般来说函数的选择是比较明确的事情,因为有着参数类型和参数数量的标准。但是如果将类型转换和默认参数都加入到重载函数中,这个过程就变的复杂起来。来看看一下代码:void f();void f(int);void f(int ,int);void f(double, double = 3.14);在函数的选择过程中分为两步:1. 找到当前作用域可见的所...

2018-09-11 09:08:00 61

转载 【共读Primer】57.[6.5]特殊用途语言特性--调试帮助 Page215

assert 检查一个不能发生的条件assert(expr) 当表达式里的值为 0 或false时,输出信息并终止程序的执行。assert(word.size() > threshold); // 如果该条件被判定为false时将终止程序NDEBUG预处理变量assert的行为还依赖于NDEBUG的变量。我们来想一下,如果你的软件已经完成,经过相当...

2018-09-10 09:34:00 78

转载 【共读Primer】56.[6.5]特殊用途语言特性--默认实参、内联函数、constexpr函数 Page211...

默认实参有时一个函数的某些参数在绝大多数情况下都被赋予一个相同的值。在这种情况下我们可以给参数一个固定的默认值。使指定参数在默认情况下使用指定的默认值如何声明默认值typedef string::size_type sz;string screen(sz ht = 24, sz wid = 80, char backgrnd = ' ');在上面的书写...

2018-09-10 08:55:00 70

转载 【共读Primer】55.[6.4]函数重载--重载与作用域 Page210

讲解之前,先来看一组代码string read();void print(const string &);void print(double);void fooBar(int ival){ bool read = false; // 新作用域:隐藏了外层的read string s = read; // 错误: read是一个布尔...

2018-09-09 15:00:00 95

转载 【共读Primer】54.[6.4]函数重载--const_cast和重载 Page209

const_cast和重载在下面的第一个函数中我们使用是否const的字符串都可以调用,但是返回值也都是const string &。如果我们需要一个返回后可以被修改的值,也就是左值,那么我们就需要用到第二个函数。第二个函数中有const_cast对字符串进行从非const到const再由const到非const的转换。我们可以看出以下的这种调用是安全的...

2018-09-09 14:25:00 285

转载 【共读Primer】53.[6.4]函数重载 Page207

在同一个作用域内,几个函数名字相同但形参列表不同,我们成为重载(voerloaded)函数。void print(const char *cp);void print(const int *beg, const int*end);void print(const int ia[], size_t size);int j[2] = {0, 1}print("He...

2018-09-08 10:34:00 72

转载 【共读Primer】52.[6.3]返回类型和return语句--返回数组指针 Page205

数组不能被拷贝,所以返回值不能是数组类型。但是我们可以使用返回指针的方式来实现返回数组的目的声明一个返回数组指针的函数int (*fun(int i))[10];// func(int i) 表示调用func函数时需要一个int类型的实参// (*func(int i)) 意味着我们可以对函数调用的结果执行解引用操作// (*func(int i))[10] ...

2018-09-07 09:28:00 76

转载 【共读Primer】51.[6.3]返回类型和return语句--列表初始化返回值 Page203

列表初始化返回值C++11规定可以以列表初始化的方式来进行返回值的表达。vector<string> process(){ if(expected.empty()) return {}; else if(expected == actual) return {"funcationX", "okay"};...

2018-09-07 09:11:00 131

转载 【共读Primer】50.[6.3]返回类型和return语句--关于返回值2 Page202

返回类类型的函数和调用运算符函数调用也是一个运算符,同样存在优先级和结合律。调用运算符与点运算符和箭头运算符同优先级,满足左结合律。因此在函数返回类类型的对象时,我们可以直接对对象进行访问。在下面的代码中直接对返回值进行了size() 函数的调用。// 调用string对象的size成员,该string对象是由shorterString函数返回的auto sz...

2018-09-06 08:52:00 85

转载 【共读Primer】49.[6.3]返回类型和return语句--关于返回值 Page201

值是如何被返回的返回值用于初始化调用点的一个临时量。在下面的函数中,返回值的内容是被拷贝到调用点string make_plural(size_t ctr, const string &word, const string &ending){ return (ctr > 1) ? word + ending : word;}...

2018-09-06 08:30:00 92

转载 【共读Primer】48.[6.3]返回类型和return语句--一般返回值类型 Page199

eturn语句终止当前执行的函数,并返回控制权到上层函数。return;return expression;两种形式,一种不含有值,一种含有值或表达式无返回值类型void swap(int &v1, int &v2){ if(v1 == v2) return; int tmp = v2; ...

2018-09-05 09:38:00 101

转载 【共读Primer】47.[6.2]参数传递--含有可变形参的函数 Page197

形如printf这类的函数。有时候我们无法确定参数的数量,这时我们需要可变参数个数的函数声明。今天我们讲述两种方法来进行参数可变函数的声明#include <iostream>#include <string>#include <initializer_list>#include<cstdarg> // 省...

2018-09-05 09:10:00 82

转载 【共读Primer】46.[6.3]参数传递--main函数处理参数 Page196

所讲到的main函数都是空参数列表的。相信大家都见过启动程序带的参数,那么这些参数时如何传递进去的。现在我们来看一下main函数声明的完整形式int main(int argc, char **argv){ for (int i = 0; i < argc; ++i) { std::cout << "comman...

2018-09-04 11:27:00 59

转载 【共读Primer】45.[6.2]参数传递--数组形参 Page193

数组的两个特殊性质:1.不能拷贝 2.使用时通常会被转换成指针所以在数组作为参数时,实际传递的是首地址的指针。虽然数组会被转换为指针进行传递,但是我们在定义函数的时候依然可以使用数组形参。void print(const int *); // 一般的指针类型参数void print(const int []); // 数组类型参数void pr...

2018-09-03 09:28:00 74

转载 【共读Primer】44.[6.2]参数传递--const形参和实参 Page190

一般对象类型的const形参形参的顶层const将被忽略掉为了说明这个问题我们引入两组代码来进行参照说明。// 该参数可以传递const的实参,也可以传递非const的实参 void fcn(const int i){}// 下面这个函数编译器会认为是重复定义,原因在于忽略顶层const特性// void fcn(int i)int main(){...

2018-09-03 08:48:00 80

转载 【共读Primer】43.[6.2]参数传递 Page187

参数传递的两种基本类型值传递 (pass by value)拷贝实参后赋值给形参,两个参数内容相同,但在内存中分别时不同的位置以传值方式进行的函数调用如果在内部修改参数的值对实参不会有任何影响。#include <iostream>using std::cout;using std::endl;// 用传值方式进行传递,在函数内部对参数的操作不...

2018-09-02 09:02:00 61

转载 【共读Primer】42.[6.1]函数基础-函数声明、分离编译 Page186

函数与变量等一样,需要在使用前进行声明。函数的声明与定义的区别是声明不需要函数体并以分号结尾一般我们将函数的声明放到头文件中#include <iostream>// 此段代码无法便已通过,因为sum在使用前没有声明int main(){ std::cout << sum(2, 3) << std::endl;...

2018-09-01 17:59:00 54

转载 【共读Primer】41.[6.1]函数基础-局部对象 Page185

对名字而言有作用域的限制名字的作用域是程序文本的一部分,名字在其中可见。对对象而言有生命周期的限制。对象的生命周期是程序执行过程中该对象存在的一段时间函数体由两个花括号组成的范围是一个新的作用域。所有在这个作用域内定义的变量都是局部变量,仅在这个作用域内可见。局部变量还会隐藏外层作用域中的同名声明。在函数退出是所有局部变量的生命周期结束。而声明在所有函数体...

2018-09-01 16:58:00 52

转载 【共读Primer】40.[6.1]函数基础 Page182

函数,简单的讲就是一个有名字的代码块。在第一篇共读中我们就介绍到了main,它就是一个函数。在这里已经清楚的极少了函数的基本组成部分:返回值类型、函数名称、函数参数列表、函数体在调用函数的时候我们通过调用运算符()来进行调用。// val的阶乘int fact(int val){ int ret = 1; // 局部变量,用于保存计算结...

2018-08-31 09:53:00 40

转载 【共读Primer】39.[5.6]try语句块和异常处理 Page172

异常,程序检测到当前的情况超出它的处理能力的时候将跑出异常。比如常见的异常有除零问题,数据库连接丢失输入需要数字的情况下给出了字母输入典型的异常处理包含以下几个部分: try块,将可能发生异常的语句置于try块中,catch 括号中的参数时一个异常类型,通过类型的不同来判断不同的异常try{ program-statements}catch(exceptio...

2018-08-31 09:13:00 82

转载 【共读Primer】38.[5.5]跳转语句 Page170

在C++中一共存在四中跳转语句:breakcontinuegotoreturnreturn代表返回当前函数,这个之前已经有了介绍,接下来我们介绍其他3个跳转语句的作用。break:简单的将就是跳出当前的while、do while、for 或 switch 语句块范围。然后继续执行其后的内容。#include <iostream>#i...

2018-08-30 10:00:00 60

转载 【共读Primer】37.[5.4]迭代语句 Page165

本节介绍的是迭代语句,也就是循环语句。循环语句的运行特点是在判断条件为false之前一直进行循环体内的操作一遍一遍的重复执行。介绍一下几种形式:// while循环while(condition) statement// 传统for循环for(init-statement; condition;expression) statment/...

2018-08-30 09:13:00 81

转载 【共读Primer】36.[5.3]条件语句 Page156

条件语句,又称为流程控制语句,是变成过程中,代码分支所必须的。用来表现逻辑结构的分支。条件语句共有以下几种:if语句它的完全展开形式如下:if (condition) statementelse if(condition) statmentelse if(condition) statmentelse stat...

2018-08-29 09:18:00 57

转载 【共读Primer】35.[5.2] 语句作用域 Page155

在if 、switch、 while 和for语句的控制结构内定义的变量只在其结构内部可见,超出结构范围将变为未定义。 1 #include <iostream> 2 #include <vector> 3 4 using std::cout; 5 using std::endl; 6 7 std::vector<int&...

2018-08-29 08:43:00 65

转载 【共读Primer】34.[5.1] 简单语句 Page154

ival + 5; // 一条没有什么实际用处的表达式语句cout << ival; // 一条游泳的表达式语句在上面的代码中,第一条语句虽然执行了加法,但是没有产生任何实际的效果,参与运算的值在运算前后没有变化,运算的结果也没有被使用而是被丢弃掉。最简单的语句空语句是C++中最简单的语句它使用一个单独的分号来表示; //...

2018-08-28 09:43:00 61

转载 【共读Primer】32.[4.11] 类型转换-显式转换 Page144

有时我们希望对象显示的转换为另一种类型。int i,j;double slope = i/j;比如在上述代码中,我们希望能够执行double类型的除法。强制类型转换static_cast<type>(val)不包含底层const具有明确定义的类型转换,都不可以使用该转换符double slope= static_cast<doub...

2018-08-27 09:54:00 59

转载 【共读Primer】31.[4.11] 类型转换-隐式转换 Page141

先来看一个例子int ival = 3.541 + 3; // 部分编译器会告警该运算损失了精度C++规定运算的类型必须是一样的,而这个表达式中两个运算常量的类型却不同。这个时候就需要通过类型转换来完成运算。这里的运算会变成如下:int ival = 3.541 + 3.0; // 将3转换为double型然后进行运算上述表达式运算出结果然后...

2018-08-27 09:30:00 89

转载 【共读Primer】30.[4.10] 逗号运算符 Page140

逗号运算符 含有两个运算对象,按照从左向右的顺序依次求值。和逻辑与、逻辑或以及条件运算符一样,逗号运算符也规定了运算对象求值的顺序。对于逗号运算符来说,首先对左侧的表达式求职,然后将求职结果丢弃掉。逗号运算符真正的结果是右侧表达式的值。如果右侧运算对象是左值,那么最终的求职结果也是左值。逗号运算符经常被用在for循环当中:vector<int>::si...

2018-08-20 09:18:00 66

转载 【共读Primer】29.[4.9] sizeof运算符 Page139

返回一条表达式或一个类型名字所占字节数。sizeof(type)sizeof exprSales_data data, *p;sizeof(Sales_data); // 存储Sales_data类型的对象所占的空间大小sizeof data; // data的类型的大小,即sizeof(Sales_data)sizeof...

2018-08-20 09:02:00 150

转载 【共读Primer】28.[4.8] 位运算符 Page135

位运算符作用域证书类型的运算对象,并把运算对象看成是二进制位的集合运算符功能用法~位求反~expr<<左移expr1 << expr2>>右移expr1 >> expr2&位与e...

2018-08-19 12:27:00 55

转载 【共读Primer】27.[4.7] 条件运算符 Page134

条件表达式,判断第一个表达式的真假,如果为真,返回冒号左侧的结果,如果为假返回冒号右侧的结果(a> b? a:b)string finalgrade = (grade < 60) ? "fail" : "pass";// 如果grade小于60则返回fail,否则返回pass条件运算符的嵌套// 如果grade值90以上,返...

2018-08-19 11:44:00 50

转载 【共读Primer】26.[4.6]成员访问运算符 Page133

成员访问运算符:. 点运算符-> 箭头运算符string s1="a string", *p = &s1;auto n = s1.size(); // 运行string对象s1的size成员n = (*p).size(); // 运行p所知对象的size成员n = p->size(); ...

2018-08-19 11:31:00 63

转载 【共读Primer】25.[4.5] 递增和递减运算符 Page131

递增:++ 使用方法为 i++;或 ++i; 等价于 i = i + 1;递减:-- 使用方法为 i--;或 --i; 等价于 i = i - 1;前加和后加的区别在于是否是叠加后的值参与整体运算int i =0,j;j = ++i; // j = 1, i = 1; 前置版本的到底增之后的值 j = i++; //...

2018-08-19 10:01:00 76

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除