自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 使用 ofstream 打开文件的设置

打开文件的默认行为是如果文件不存在就创建它,如果文件已经存在就清除文件(即删除文件的内容)。如果不希望在打开文件时执行默认行为,可以给ofstream对象的构造函数显示的提供另一个变量来改变它的默认行为。合法的变量包括:ios::app——附加到已有文件末尾,而不是清除它们。ios::ate——是你处于文件末尾,但你可以在文件的任何地方写数据。ios::trunc——默认。清除已有文件的内容。ios::nocreate——如果文件不存在,则打开操作失败。ios::nocreplace——如果文件

2020-07-02 18:48:18 1075

原创 C++中 string 为什么不引用string头文件还可以用

因为我们通常使用的 < iostream > 头文件中包含了 < string > 头文件。

2020-06-28 17:18:07 1301

原创 命名为 count 全局变量编译器报错为“引用歧义”(待解决)

#include <iostream>#include <cstring>using namespace std;char a[50], b[50];int la, lb, count = 0;void input_data(){ cin >> a; cin >> b;}void solve(){ bool match; la = strlen(a); lb = strlen(b); fo

2020-06-28 17:08:50 294 1

原创 C++ 的 cstdlib 库中未包含 itoa() 函数

itoa() 函数的功能是把int转换为char*字符数组,通常包含于 <stdlib.h>(C++版本:< cstdlib >)中。但因为它是一个非标准的C / C++语言功能,因此不能好好的被所有编译器使用,有时也会被库忽略。解决方案,使用 sprintf() 函数代替。#include <iostream>#include <cstdlib>using namespace std;int main(){ int n = 1089;

2020-06-28 16:18:16 971

原创 字符串赋值给字符指针

今天在看书中例题时看到了如下代码:#include <iostream>using namespace std;int main(){ char *p = NULL; p = "computer"; cout << p << endl; for (int i = 0; i < 8; ++i) cout << p[i]; cout << endl; while

2020-06-28 15:58:01 4302 2

原创 字符数组的特殊特性

我们直到数组名其实是指向数组首元素的指针。但对于字符数组而言,直接输出字符数组名可以输出整个数组元素。如果是其他类型的数组则输出的是首元素的地址。这是因为 C 和 C++ 不进行数组的边界检查,在使用 cout 函数输出数组元素时无法得知何时终止。而字符串则不同,它有一个 ‘\0’ 用来表示字符串结束,因此可以执行这种操作。...

2020-06-28 10:48:06 478

原创 《计算机程序设计基础》课后习题(一):编程准备

敬请期待。。。

2020-06-27 22:32:19 146

原创 调试中的Step over, Step into 和 Step out

(1)Step over(F10):单步跳过。遇到子函数不会进入子函数内,而是将子函数整个执行完再停止。(即将子函数整体算作一步,在不存在子函数的情况下是和 Step into 效果相同)(2)Step into(F11):单步调试。遇到子函数会进入并且继续单步执行。(3)Step out(↑F11):单步跳出。当单步调试进入子函数内时,执行完子函数余下部分,并返回到上一层。...

2020-06-27 15:08:48 1132

原创 对数的表达

1.以 e 为底的表示方法为:y = log(x),函数的完整原型为:double log(double x);2.以 10 为底的表示方法为:y = log10(x),函数的完整原型为:double log10(double x);3.以任意数字为底,利用换底公式:log_a(b) = log_c(b) / log_c(a);表示方法为:y = log(b) / log(a),函数的完整原型为:double (log(double b) / log(double a));...

2020-06-26 22:20:53 2214

原创 术语表(七):类

<基于 C++ Primer P273>1.abstract data type2.access specifier3.aggregate class4.class5.class declaration6.class keyword7.class scope8.const member function9.constructor10.constructor initializer list11.data abstraction12.default constructor

2020-06-25 23:17:54 132

原创 类(六):类的静态成员

<基于 C++ Primer P268>我们需要类的一些成员与类本身直接相关,而不是与类的各个对象保持关联。(1)声明静态成员我们通过在成员的声明之前加上关键字 static 使得其与类关联在一起。静态成员既可以是 public 也可以是 private。静态数据成员的类型可以是常量、引用、指针、类类型等。class Account{public: void calculate() {amount += amount * interestRate;} static doubl

2020-06-25 22:55:01 445

原创 类(五):构造函数

<基于 C++ Primer P257>1.构造函数初始值列表我们在定义变量时习惯于立即对其初始化,而非先定义、在赋值。string foo = "Hello World!"; // 定义并初始化string bar; // 默认初始化成空 string 对象bar = "Hello World!"; // 为 bar 赋一个新值类似的,对于对象的数据成员,如果没有在构造函数的初始值列表中显式地初始化成员,则该成员将在构造函数体之前执

2020-06-25 14:18:24 322

原创 类(四):类的作用域

<基于 C++ Primer P253>在类的作用域之外,普通的数据和函数成员只能由对象、引用或者指针使用成员访问运算符来访问。对于类类型成员则是哟个作用域运算符访问。Screen::pos ht = 24, wd = 80; // 使用 Screen 定义的 pos 类型Screen scr(ht, wd, ' ');Screen *p = &scr;char c = scr.get();c = p->get();(1)作用域和定义在类外部的成员一个类就是一个作

2020-06-24 23:53:59 1121

原创 类(三):类的其他特性

<基于 C++ Primer P243>包括:类型成员、类的成员的类内初始值、可变数据成员、内联成员函数、从成员函数返回 *this、如何定义并使用类类型及友元类。1.类成员再探(1)定义一个类型成员除了定义数据和函数成员之外,类还可以自定义某种类型在类中的别名。由类定义的类型名字和其他成员一样存在访问限制。class Screen{public: typedef std::string::size_type pos; // using pos = std::string::s

2020-06-24 21:49:23 269

原创 类(二):访问控制与封装

<基于 C++ Primer P240>我们使用访问说明符加强类的封装性。①定义在 public 说明符之后的成员在整个程序内可被访问,public 成员定义类的接口。②定义在 private 说明符之后的成员可以被类的成员函数访问,但是不能被使用该类的代码访问,private 部分封装了类的实现细节。class Sales_data{public: Sales_data() = default; Sales_data(const std::string &s) : bo

2020-06-24 17:23:51 151

原创 类(一):定义抽象数据类型

<基于 C++ Primer P228><本节内容基本围绕书中“书店管理系统”这个例子,因此没有看过书的人可能较难理解,不建议参考此部分内容>类的基本思想是数据抽象和封装。(1)数据抽象是一种依赖于接口和实现分离的编程技术。①类的接口包括用户所能执行的操作。②类的实现则包括类的数据成员、负责接口实现的函数体以及定义类所需的各种私有函数。(2)封装实现了类的接口和实现的分离。封装后的类隐藏了它的实现细节,也就是说,类的用户只能使用接口而无法访问实现部分。(3)类要想实现数

2020-06-24 16:44:19 1362

原创 Xcode(三):The document “XXX” could not be saved. You don’t have permission.

1.打开 preference;2.打开 location;3.点击 Derived Data 下面路径右侧的小箭头;4.清空 Derived Data 中的所有文件;5.使用活动管理器强制退出 Xcode;6.问题解决!

2020-06-23 16:41:38 4043 3

原创 术语表(三)—— 字符串、向量和数组

<基于 C++ Primer P117>1.begin2.buffer overflow3.C-style string4.class template5.compiler extension6.container7.copy initialization8.difference_type9.direct initialization10.empty11.end12.getline13.index14.instantiation15.iterator16.iter

2020-06-21 12:44:37 102

原创 迭代器(二):运算

<基于 C++ Primer P99>相较于标准容器迭代器,vector 和 string 迭代器支持了更多额外的运算符。iter + n;iter - n;iter1 += n;iter1 -= n;iter1 - iter2; // 返回类型是 difference_type 的带符号整型数>, >=, <, <=;利用迭代器运算实现二分搜索// text 必须是有序的// beg 和 end 表示我们搜索的范围auto beg = text.

2020-06-21 12:38:20 158

原创 迭代器(一):基础知识

<基于 C++ Primer P95>迭代器是一种相较于下标运算符而言更为通用的访问 string 对象的字符或 vector 对象的元素的机制。因为除了 vector 之外,标准库还定义了其他几种容器。所有标准库容器都可以使用迭代器访问,但是其中只有少数几种才同时支持下标运算符。string 对象虽然不属于容器类型,但是 string 支持很多与容器类型类似的操作。1.类似于指针类型,迭代器提供了对对象的间接访问,也有有效与无效之分。2.与指针类型不同,获取迭代器不使用取地址符,有迭代器

2020-06-21 12:13:23 298

原创 vector(三):其他操作

<基于 C++ Primer P91>1.vector 支持的一些操作v.empty()v.size()v.push_back(t)v[n]v1 = v2v1 = {a, b, c...}v1 == v2v1 != v2<, <=, >, >=与 string 基本一致。注意其中 size 函数返回 vector 对象中元素的个数,类型是 vector< int >::size_type,vector 对象的类型总是包含着元素的类型。

2020-06-21 01:17:32 123

原创 vector(二):向对象中添加元素

<基于 C++ Primer P90>利用 vector 的成员函数 push_back 向其中添加元素,负责把一盒值当成 vector 对象的尾元素 “push” 到 vector 对象的 “back”。vector<int> v2for (int i = 0; i != 100; ++i) v2.push_back(i);由于 C++ 标准要求 vector 应该能在运行时高效快速地添加元素,因此在定义 vector 对象的时候设定其大小是没有必要甚至性能更差的,除非

2020-06-21 00:48:46 535

原创 vector(一):定义和初始化

<基于 C++ Primer P87>标准库类型 vector 表示对象的集合,其中所有对象的类型都相同。使用 vector 必须包含适当的头文件。vector 是类模版而非类型,模版可以看作为编译器生成类或函数编写的一份说明,编译器根据模版创建类或函数的过程成为实例化。由于引用不是对象,因此不存在包含引用的 vector,除此之外大多数类型都可以构成 vector 对象,甚至组成 vector 的元素也可以,如:vector<vector< int > >1.初

2020-06-21 00:35:19 1144

原创 string (三):处理对象中的字符

<基于 C++ Primer P81>关键的问题:一是如何获取字符本身,二是如何改变某个字符的特性。cctype 头文件中的函数isalnum(c); isalpha(c); iscntrl(c); isdigit(c); isgraph(c); islower(c); isprint(c); ispunct(c); isspace(c); // 空白包括:空格、横向制表符、纵向制表符、回车符、换行符、进纸符isupper(c); isxdigit(c); tolower(c); t

2020-06-20 23:13:12 137

原创 string(二):对象上的操作

<基于 C++ Primer P77>string 的操作os << s // 将 s 写到输出流 os 当中,返回 osis >> s // 从 is 中读取字符串赋给 s,字符串以空白分隔,返回 isgetline(is, s) // 从 is 中读取一行赋给 s,返回 falses.empty() // s 为空返回 true,否则返回 falses.size() // 返回 s 中字符的个数s[n]

2020-06-20 22:40:53 129

原创 string(一):定义和初始化

<基于 C++ Primer P76>标准库类型 string 表示可变长的字符序列。1.初始化 string 对象的方式string s1; // 默认初始化,s1是一个空串string s2(s1); // s2 是 s1 的副本string s2 = s1; // 等价于 s2(s1),s2 是 s1 的副本string s3("value"); // s3 是字面值 "value" 的副本,除了字面值最后的那个空字符外string

2020-06-20 20:48:42 515

原创 函数(六):函数指针

<基于 C++ Primer P221>1.函数指针指向的是哈函数而非对象,指向某种特定类型。函数的类型由它的返回类型和形参类型共同决定,与函数名无关。想要声明一个可以指向该函数的指针,只需要用指针替换函数名即可。2.当我们把一个函数名当做一个值使用时,该函数自动地转换成指针。此外,可以直接使用指向函数的指针调用该函数,无须提前解引用指针。bool lengthCompare(const string &, const string &);bool (*pf)(cons

2020-06-20 18:55:31 129

原创 函数(五):特殊用途语言特征

<基于 C++ Primer P211>1.默认实参(1)默认实参作为形参的初始值出现在形参列表中,一旦某一个形参被赋予了默认值,它后面的所有形参都必须有默认值。(2)设计含有默认实参的函数时,必须合理设置形参的顺序,尽量让不怎么使用默认值的形参出现在前面,让经常使用默认值的形参出现在后面。(3)虽然多次声明同一个函数是合法的,但是在给定的作用域中一个形参只能被赋予一次默认实参。因此,函数的后续声明只能为之前那些没有默认值的形参添加默认实参,而且该形参右侧的所有形参必须都有默认值。(4

2020-06-20 18:00:50 77

原创 函数(四):函数重载

<基于 C++ Primer P206>1.定义重载函数(1)对于重载的函数,应该在形参数量或形参类型上有所不同。形参名是否相同,同一类型的不同别名,返回值类型是否相同不能用于区别重载函数。(2)特别的,顶层 const 不影响传入函数的对象,一个拥有顶层 const 的形参无法和另一个没有顶层 const 的形参区别开来。但对于底层 const 形参,可哟通过区分其指向的是常量对象还是非常量对象实现函数重载。(3)函数重载可以在一定程度上减轻我们为函数起名字的负担,但是应当只重载那些

2020-06-20 16:26:26 289

原创 函数(三):返回类型和 return 语句

<基于 C++ Primer P199>1.无返回值的函数只有返回类型是 void 的函数。可以不使用 return 语句,会隐式地执行。若想在中间位置提前退出,可以使用 return 语句。可以使用 return 语句返回另一个返回 void 类型的函数。2.有返回值的函数在含有 return 语句的循环后面应该也有一条 return 语句。(1)值是如何被返回的:返回一个值的方式和初始化一个变量或形参的方式完全一样:返回值用于初始化调用点的一个临时量,该临时量就是函数调用的结果

2020-06-20 14:37:43 1282

原创 函数(二):参数传递

<基于 C++ Primer P187>1.传值参数(1)函数对形参的所有操作都不会影响实参。(2)指针形参可以通过形参改变实参所指对象的值,但实参本身并没有改变。C中常常使用指针类型的形参访问函数外部的对象,但在C++中建议使用引用类型的形参代替指针。2.传引用参数(1)引用形参是它对应的实参的别名。(2)使用引用可以避免拷贝,尤其是类类型对象较大或不支持拷贝操作时。(3)如果函数无须改变引用形参的值,最好将其声明为常量引用。(4)使用引用形参可以返回额外信息。3.cons

2020-06-20 13:47:36 211

原创 函数(一):基本知识

<基于 C++ Primer P180>函数是一个命名了的代码块,我们通过调用函数执行相应的代码。函数的定义包括以下部分:返回类型、函数名字、形参列表、函数体。函数通过调用运算符()执行,作用于一个表达式(函数或指向函数的指针),括号内是实参列表,调用表达式的类型就是函数的返回类型。1.调用函数函数的调用完成两项工作:一是用实参初始化对应的形参,二是将控制权由主调函数转移到被调用函数。遇到return语句函数结束执行过程,同样完成两项工作:一是返回return语句中的值(如果有的话)

2020-06-20 12:56:14 526

转载 Xcode(二):Xcode光标移动快捷键

1.光标移动Command + ← :到行首(不管折行)Command + → :到行尾Ctrl + F 光标前进一个字符,相当于右键(F = Forward)Ctrl + B 光标后退一个字符,相当于左键(B = Backward)Ctrl + P 上移一行,相当于上键(P = Previous)Ctrl + N 下移一行,相当于下键(N = Next)Ctrl + A : 移动光标到本行行首(函数如果折行,到上一行首)(A = Ahead)Ctrl + E : 移动光标到本行行尾(E =

2020-06-20 12:26:29 889

原创 术语表(六)—— 函数

<基于 C++ Primer P225>1.ambiguous call2.argument3.Assert4.automatic object5.best match6.call by reference7.call by value8.candidate function9.constexpr10.default argument11.executable file12.function13.function body14.function matching15

2020-06-18 20:35:33 97

原创 术语表(四)—— 表达式

<基于 C++ Primer P149>1.arithmetic conversion2.associativity3.binary operator4.cast5.compound expression6.const_cast7.conversion8.dynamic_cast9.expression10.implicit conversion11.integral promotion12.lvalue13.operand14.operator15.order o

2020-06-17 23:36:13 115

原创 表达式(三):运算符

<基于 C++ Primer P124>1.算数运算符:+(正)、-(负)、*、/、%、+、-(1)布尔值不应该参与运算。bool b = true;bool b2 = -b; // b2 为真(2)m = (m / n) * n + m % n①(-m) / n 和 m / (-n) 都等于 -(m / n);②m % (-n) 等于 m % n,(-m) % n 等于 m % n;21 % 6 = 3; 21 / 6 = 3;21 % 7 = 0; 21 / 7 = 3;

2020-06-17 20:55:07 494

原创 表达式(一):基本知识

<基于 C++ Primer P120>表达式由一个或多个运算对象组成,对表达式求值将得到一个结果。字面值和变量是最简单的表达式,其结果就是字面值和变量的值。运算对象和运算符组合可以生成较为复杂的表达式。1.运算符(1)一元运算符:取地址符 & ,解引用符 * ……(2)二元运算符:相等运算符 ==,乘法运算符 * ……(3)三元运算符:条件运算符 ?:(4)函数调用也是一种特殊的运算符,对运算对象的数量没有限制。2.左值和右值当一个对象被用作左值的时候,用的是对象的身

2020-06-17 16:40:59 676

原创 数组(三):多维数组

<基于 C++ Primer P112>多维数组的本质是数组的数组。// 大小为 3 的数组,每个元素是含有 4 个整数的数组。int ia[3][4]; // 大小为 10 的数组,每个元素是大小为 20 的数组,这些数组的元素是含有 30 个整数的数组int arr[10][20][30];1.初始化int ia[3][4] = { {0, 1, 2, 3}, // 第一行的初始值 {4, 5, 6, 7}, // 第二行的初始值 {8, 9, 10, 11} /

2020-06-17 00:32:04 3396

原创 数组(二):指针与数组

<基于 C++ Primer P105>在大多数表达式中,使用数组类型的对象其实是使用一个指向该数组首元素的指针。string nums[] = {"one", "two", "three"};string *p = &nums[0];string *p2 = nums; // 等价于 p2 = &nums[0]在一些情况下,数组的操作实际上是指针的操作。但使用 decltype 关键字时上述转换不会发生。int ia[] = {0, 1, 2, 3, 4, 5,

2020-06-16 19:57:23 107

原创 数组(一):基本知识

<基于 C++ Primer P101>1.定义和初始化数组在编译时维度应是已知的,即必须是一个常量表达式。unsigned cnt = 42; // 不是常量表达式constexpr unsigned sz = 42; // 常量表达式int arr[10]; // 正确int *parr[sz]; // 正确string bad[cnt]; // 错误string strs[get

2020-06-15 23:50:28 129

空空如也

空空如也

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

TA关注的人

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