当前位置: 代码迷 >> 综合 >> Learn C++ by Accelerated C++(to be continued)
  详细解决方案

Learn C++ by Accelerated C++(to be continued)

热度:25   发布时间:2023-12-15 05:27:48.0

文章目录

  • 0. Getting started
    • 知识点
    • 第一个C++程序
    • 习题:
  • 1. 使用字符串
    • 知识点
    • 1.1 输入
    • 1.2 为姓名装框
  • 小结
    • 习题
  • 2. 循环和计数
    • 知识点
    • while 语句
    • if 语句
    • 程序简化
    • 计数
    • 小结
    • 习题
  • 使用批量数据
  • 组织程序和数据
    • 知识点
  • 使用顺序容器并分析字符串
  • 使用库算法
  • 使用关联容器
  • 使用泛型函数
  • 定义新类型
  • 管理内存和低级数据结构
  • 定义抽象数据类型
  • 使类对象像一个数值一样工作
  • 使用继承与动态绑定
  • 近乎自动地管理内存
  • 再探字符图形

Learn C++ by Accelerated C++

0. Getting started

知识点

  • 标准库、核心语言
  • 程序结构:自由风格
  • 类型
  • 命名空间
  • 定义和头文件
  • 主函数
  • 花括号和分号

第一个C++程序

#include<iostream> // 标准库头文件,输入/输出流(Input/Output Stream)
int main(){
           // 调用主函数响应程序需求(返回0或者其它)std::cout << "Hello, World!" << std::endl;// 使用标准库中的输出运算符 << 将 'Hello, World!'写到标准输出中,并显示在cout所在窗口,std::endl为当前输出语句行的结束,并实现换行(本质上是用两个<<实现了连续的输出)return 0;  // 返回0(表示成功)}
  • #include指令是一种是调取头文件的工具,用来明确指定程序所需的那部分头文件
  • iostream是Standard library header 即标准库头文件
  • <<一种运算符(operator)
  • std::coutstd::endl操作数(operand),其中后者是控制器
  • cout是标准库中的对象;endl是一个函数模板
  • :作用域运算符std:cout表示的是在(名字空间)作用域std中的名称cout
  • "Hello, World!"表达式(expression)

一些问题:
什么是定义,什么是头文件?
在这里插入图片描述

头文件和标准库的区别?

什么是核心语言?什么是标准库?

习题:

  • 0-0
#include <iostream>int main() {
    std::cout << "Hello, world!" << std::endl;return 0;
}
  • 0-2
#include <iostream>int main() {
    std::cout << "This (\") is a quote, and this (\\) is a backslash."<< std::endl;return 0;
}
  • 0-4
# include <iostream>int main(){
    std::cout<<"#include <iostream>\n""\n""int main(){\n""\tstd::cout<<\"Hello,world\"<<std::endl;\n""\treturn 0;\n""}\n"<<std::endl;return 0;
}#include <iostream>int main(){
    std::cout<<"Hello,world"<<std::endl;return 0;
}Program ended with exit code: 0
  • 0-9
int main(){
    }
  • 0-10
#include<iostream>int
main
(
)
{
    
std
::
cout
<<
"Hello, world!"
<<
std
::
endl
;
return
0
;
}

1. 使用字符串

知识点

  • 声明
  • 变量
  • 初始化
  • 输入
  • string 库

1.1 输入

#include<iostream>
#include<string>int main(){
    // 请某人输入姓名std::cout << "Please enter your first name: ";// 读姓名std::string name; // 定义变量 namestd::cin >> name; // 把姓名读进 name// 输出对这个人的问候语std::cout << "Hello, " << name << "!" << std::endl;return 0;}

从现在开始,以后的代码不再由Xcode完成,而是转向使用jupyter notebook ,环境配置可查看之前的文章:Mac上配置环境并运行第一个C++程序

1.2 为姓名装框

std::cout << "Please enter your first name: ";
std::string name;     
std::cin >> name;
const std::string greeting = "Hello, " + name + "!";
const std::string spaces(greeting.size(), ' ');     
const std::string second = "* " + spaces + " *";
const std::string first(second.size(), '*');
std::cout << std::endl;     
std::cout << first << std::endl;     
std::cout << second << std::endl;     
std::cout << "* " << greeting << " *" << std::endl;     std::cout << second << std::endl;     
std::cout << first << std::endl;
Please enter your first name: Robin_pi********************1.                  *2. Hello, Robin_pi! *3.                  *
********************4. List item
  • std::cout << "xxxx" 输出(write)
  • std::string name 定义变量name,类型为std::string
  • std::cin >> name 输入(read)
  • 运算符是左结合

  • 运算符是右结合

  • = 实现变量赋值(同时完成初始化
  • const 为常量关键字,可以确保常量变量的值不会改变

一些问题:
是什么是变量?作用是什么?和对象的区别是什么?
存放数据的地方,是一个具有名称对象,而对象是计算机中的一段具有类型内存空间
什么是类型?有哪些类型?

表达式包含操作数和运算符每一个操作数都具有一个类型,比如核心语言定义了int代表的是整数类型,定义了std::ostream作为提供了基于流的输出的类型。

小结

在这里插入图片描述注意:在一对花括号内定义的变量是局部变量

习题

暂略~

2. 循环和计数

知识点

  • 循环
  • 条件分支
  • 循环不变式

while 语句

while(condition)statement   // <font color =red>若statement为语句,则其本身包含了分号;,若为块语句,则它本身也会有{},所以没有分号;

或者

while(condition) statement
  • 设计循环语句

if 语句

if (condition)statement   // 同 while,这里面要么是语句(分号;结尾)要么是语句块(用花括号{}包起来)

或者

if (condition)statement1 
elsestatement2

略~

程序简化

  • using 声明
  • for 语句
for(init-statement condition;expression)  // 注意,初始化语句本身包含了分号;statement

例如:

#include<iostream>
#include<string>int main(){
    for (int r = 0; r <= 3; ++r)  // `++r` 特指 `r = r + 1`,即返回相加后的值(若是`++r`则是返回r的原始值)std::cout << "*";
} 

一般而言,for语句的意义相当于:

{
    
init-statement     
while (condition) {
    statement           expression; }
}

即:

#include<iostream>
#include<string>int main(){
    int r=0;while (r<=3){
    std::cout << "*";++r;}}
  • 压缩检测

计数

  • 从0开始计数
for (string::size_type r = 0; r != rows; ++r) {
    // <输出一行>
}
  • 从1开始计数
for (string::size_type r = 1; r <= rows; ++r) {
    // <输出一行>
}

两种方式循环的次数一样,但是一般都选择从0开始计数:可以使用不对称区间来表示间隔。原因如下:

不对称区间的一个重要性质:在一个形式为[m,n)的区间包含 n-m 个元素,而形式[m,n]的区间中则有 m-n+1 个元素。(即可以很快地看出区间中所包含的元素个数)
从零计数使得循环不变式更易于表达:(对于[0,rows])到目前为止,我们已经输出了r 行。
用 != 比 <=使我们更能了解程序的状态:前者表示已经输出了r行,而后者表示至少输出了r行(可能更多!)

小结

(1)操作数(operators)
在这里插入图片描述在这里插入图片描述

(2)类型
在这里插入图片描述

本章的一些问题:

  • 为什么不直接使用int而是使用const intconst的作用是什么?
    一,减少出错的几率;二,明确地向读代码的人传递信息:不能修改这个变量
  • (定义字符串的长度变量时)为什么不直接使用const int cols而是使用const std::string::size_type colssize_typeint的用法区别?
    size_type为无符号类型,int为有符号类型(可能为负数)。一般我们都会用std::string::size_type来当做储存字符串长度的变量的变量类型。

习题

暂时决定:习题与理论分开(加快速度)

使用批量数据

一些数据类型

  • int:整型
  • double :双精度浮点类型
  • float :单精度浮点类型

一些操作:

  • ? : 运算符:条件运算符,是 if-else-then 的缩写,即 if xxx (?) else (:)xxx

类型定义:

  • typedef type name;

组织程序和数据

知识点

  • 函数(子程序)
  • 数据结构
  • 程序结构

变量引用:

  • vector<double>& hw = homework; //hw是homework的一个替代名
  • count vector<double>& chwl = chw; // 注意chwl是只读的

使用顺序容器并分析字符串

使用库算法

  • 泛型算法
  • 增量算法

使用关联容器

使用泛型函数

定义新类型

管理内存和低级数据结构

  • 指针与数组

定义抽象数据类型

使类对象像一个数值一样工作

使用继承与动态绑定

近乎自动地管理内存

再探字符图形

参考:

  1. 代码部分的参考答案(已下载至本地:github-Accelerated C++)
  2. 全部的答案(已下载本地:github-Accelerated-cpp-master)
  3. C++ reference——要多多查看官方文档!
  相关解决方案