自定义博客皮肤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 557

转载 【共读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 146

转载 【共读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 160

转载 【共读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 135

转载 【共读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 131

转载 【共读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 151

转载 【共读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 128

转载 【共读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 99

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

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

2018-09-10 09:34:00 128

转载 【共读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 117

转载 【共读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 138

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

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

2018-09-09 14:25:00 376

转载 【共读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 124

转载 【共读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 133

转载 【共读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 186

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

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

2018-09-06 08:52:00 134

转载 【共读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 143

转载 【共读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 149

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

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

2018-09-05 09:10:00 140

转载 【共读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 98

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

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

2018-09-03 09:28:00 122

转载 【共读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 136

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

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

2018-09-02 09:02:00 107

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

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

2018-09-01 17:59:00 83

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

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

2018-09-01 16:58:00 85

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

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

2018-08-31 09:53:00 75

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

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

2018-08-31 09:13:00 127

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

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

2018-08-30 10:00:00 94

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

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

2018-08-30 09:13:00 111

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

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

2018-08-29 09:18:00 90

转载 【共读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 89

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

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

2018-08-28 09:43:00 98

转载 【共读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 85

转载 【共读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 133

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

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

2018-08-20 09:18:00 147

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

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

2018-08-20 09:02:00 197

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

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

2018-08-19 12:27:00 89

转载 【共读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 71

转载 【共读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 85

转载 【共读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 140

空空如也

空空如也

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

TA关注的人

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