《Essential C++》读书笔记 之 C++编程基础
《Essential C++》读书笔记 之 C++编程基础
2014-07-03
1.5 如何运用Arrays(数组)和Vectors(向量)
1.1 如何撰写C++程序
函数(function)是一块独立的程序代码序列(code sequence),能够执行一些运算。它包含4个部分:
- 返回值型别(return type)
- 函数名称
- 参数列(parameter list)
- 函数主体(function body)
函数的返回值通常用来表示运算结果。main()函数返回整数型别。mian()的返回值用来告诉调用这,这个程序是否执行正确。习惯上,程序执行无误时,我们令main()返回零。若返回一个非零值,表示程序发生了错误。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string user_name; //cout read as (see out)
cout << "Please enter your name: ";
//cin read as (see in)
cin >> user_name;
cout<<"Hello, ";
cout<<user_name;
cout<<"... and goodbye!\n"; return ;
}

头文件
欲使用class,我们必须先在程序中含入其头文件。表头文件可以让程序知道class的定义。C++标准的“输入/输出 程序库”名为iostream,其中包含了相关的整套classes,用以支持对终端机和文件的输入与输出。
命名空间
上述代码第3行 using namespace std; 其中std是一个命名空间。
所谓命名空间,是一种将程序库名称封装起来的方法。通过这种方法,可以避免和应用程序发生命名冲突(若两个不同的实体(entity)具有相同名称,就会发生命名冲突,导致程序无法区分两者)。
若要在程序中使用string class以及cin、cout这两个iostream类对象,我们不仅得含入,还得让命名空间std内的名称曝光。而所谓的 using directie 是让名称空间中的名称曝光的最简单方法:
using namespace std;

图1 头文件iostream中的命名空间
1.2 对象的定义与初始化
初始化有两种方式:
- 以assignment运算符(=)初始化: int num_tries =0;
- 以构造函数语法初始化: int num_tries(0);
内建字符常量(有时也称为“转义序列,escape sequence”),如:
- '\n' 换行字符(new line)
- '\t' 跳格字符(tab)
- '\0' null
1.3 撰写表达式
运算符的优先级(precedence)
如果同一个表达试中使用多个运算符,其核定(evaluate)顺序是由预先定义的优先级决定的。如果想改变内建的运算符优先级,可利用小括号。
运算符优先级如下(位置在上者优先级高,同一行,左高):
逻辑运算符 NOT
算术运算符 (*, /, %)
算术运算符 (+, -)
相对关联运算符 (<, >, <=, >=)
相对关联运算符 (==, !=)
逻辑运算符 AND
逻辑运算符 OR
赋值(assignment)运算符
1.5 如何运用Arrays(数组)和Vectors(向量)
array,容量定义时就已确定,必须是个常量表达式
int pell_seq[];
vector,定义时,必须含入vector头文件。vector是个class temple,类型写在角括号内,容量写在小括号内(容量不一定得是个常量表达式),如下代码所示:
#include <vector>
vector<int> pell_seq(seq_size);
1.6 指针带来弹性
指针(pointer)的运用,舍弃以名称指定的方式,间接的存取对象。我们可以操控指针(代表某特定内存地址),而不再直接操控对象。
指针增加了程序的弹性,但同时也增加了直接操控对象时所没有的复杂度,如下代码所示:
int ival = ;
int *pi; //pi是个int型别的对象指针
pi=&ival; //将pi的初值设为ival所在的内存地址
如果要存取一个由指针寻址的对象,我们必须对该指针进行提领(dereference)操作--也就是取得“位于该指针所指之内存地址上”的对象。在指针之前加上*号即可:
if(*pi!=) //读取ival的值
*pi=; //写值至ival
指针的第二个复杂的地方是,指针可能并不指向任何对象,使得程序在执行期间出错(对不指向任何对象的指针进行提领(dereference))。
一个未指向任何对象的指针,其内含地址为0。有时我们称之为null指针。通过以下代码检验指针所含地址是否为0:
int *pi=;
if(pi&&*pi!=) //if(pi&&...)只有在pi含有一个非0值时,其核定结果才是true
指针的使用
vector<int> fibonacci, lucas, pell, triangular, square, pentagonal;
//pv为指向vector<int>数列的指针
vector<int> *pv=;
pv=&fibonacci;
//...
pv=&lucas; //seq_addrs是个array,其元素型别为vector<int> *。seq_addr[0]所含有的值是fibonacci vector的地址。
vector<int> *seq_addr[]={&fibonacci, &lucas, &pell, &triangular, &square, &pentagonal};
使用class object的指针,和使用内建型别的指针略有不同。这是因为class object链接到一组我们可以调用的操作行为:
//.称为dot成员选择运算符
if(fibonacci.empty()&&(fibonacci[]==));
//若想通过指针来选择操作行为,必须改用arrow成员选择运算符
if(pv->empty()&&((*pv)[]==));
if(seq_addr[]->empty()&&((*seq_addr[])[]==))
《Essential C++》读书笔记 之 C++编程基础的更多相关文章
- Essential C#读书笔记
Essential C#读书笔记 这是一个多变的时代,一次又一次的浪潮将不同的人推上了巅峰.新的人想搭上这一波,同时老的人也不想死在沙滩上.这些年新的浪潮又一次推开,历史不停地重复上演,那便是移动互联 ...
- Java并发编程的艺术读书笔记(2)-并发编程模型
title: Java并发编程的艺术读书笔记(2)-并发编程模型 date: 2017-05-05 23:37:20 tags: ['多线程','并发'] categories: 读书笔记 --- 1 ...
- Java并发编程的艺术读书笔记(1)-并发编程的挑战
title: Java并发编程的艺术读书笔记(1)-并发编程的挑战 date: 2017-05-03 23:28:45 tags: ['多线程','并发'] categories: 读书笔记 --- ...
- 《玩转Django2.0》读书笔记-Django建站基础
<玩转Django2.0>读书笔记-Django建站基础 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.网站的定义及组成 网站(Website)是指在因特网上根据一 ...
- java学习笔记15--多线程编程基础2
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note15.html,转载请注明源地址. 线程的生命周期 1.线程的生命周期 线程从产生到消亡 ...
- java学习笔记14--多线程编程基础1
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note14.html,转载请注明源地址. 多线程编程基础 多进程 一个独立程序的每一次运行称为 ...
- 《逐梦旅程 WINDOWS游戏编程之从零开始》笔记4——Direct3D编程基础
第11章 Direct3D编程基础 2D游戏是贴图的艺术,3D游戏是渲染的艺术.这句话在我学过了之前的GDI编程之后,前一句算是有所体会,现在是来理解后一句的时候了. 安装DirectX SDK配置啥 ...
- 【记】《.net之美》之读书笔记(一) C#语言基础
前言 工作之中,我们习惯了碰到任务就直接去实现其业务逻辑,但是C#真正的一些基础知识,在我们久而久之不去了解巩固的情况下,就会忽视掉.我深知自己正一步步走向只知用法却不知原理的深渊,所以工作之余,一直 ...
- (转)C++笔记:面向对象编程基础
非常棒的总结 http://blog.csdn.net/liufei_learning/article/details/21312701 面向对象编程基础 面向对象编程基于三个基本概念: 数据抽象-类 ...
随机推荐
- 幕布V1.1.9最新版漏洞集合
0X00 前言 幕布本人最早接触是在P神的知识星球里面看到P神推荐的,后来下了个用着还挺好用. 之前一直都放一些零零散散的笔记,最近整理的时候,一时兴起,本着漏洞源于生活的态度,遂对幕布的安全性做了些 ...
- scss、less 对浏览器兼容的处理方法, css 的单行溢出、多行溢出
1. scss @mixin rounded($param1,$param2) { #{$param1}:$param2; -webkit-#{$param1}: $param2; ...
- 两类传输协议:TCP,UDP
1) TCP是Transfer Control Protocol的简称,是一种面向连接的保证可靠传输的协议.通过TCP协议传输,得到的是一个顺序的无差错的数据流.发送方和接收方的成对的两个socket ...
- Progressive web app理念及发展前景
前一段时间微信推出微信小程序进行公测,着实火了一把,博得了大众的眼球,不明真相的吃瓜观众们纷纷围观,所谓的“微信小程序”,通俗的讲就是一种不需要下载安装即可使用的应用程序,脱离于app商店依托于浏览器 ...
- Python数据可视化系列-01-快速绘图
快速绘图 数据图绘制 matplotlib的字库pyplot提供了快速绘制2D图标的API接口. import numpy as np import matplotlib.pyplot as plt ...
- ZJUT 地下迷宫 (高斯求期望)
ShowID=1423">http://cpp.zjut.edu.cn/ShowProblem.aspx?ShowID=1423 设dp[i]表示在i点时到达终点要走的期望步数,那么d ...
- Go语言之高级篇beego框架之model设计构造查询
一.model设计构造查询 QueryBuilder 提供了一个简便,流畅的 SQL 查询构造器.在不影响代码可读性的前提下用来快速的建立 SQL 语句. QueryBuilder 在功能上与 ORM ...
- C# ConcurrentStack实现
我们通过C# Queue 和Stack的实现知道Stack是依靠数组实现的,那么ConcurrentStack的栈又是如何实现的了,然后它的线程安全又是怎么做到的了? 来看看其code吧 public ...
- mysql 字符串分割 和 动态执行拼接sql
本人以前主要用的是MSSQL,最近项目在使用MYSQL,自己是一个 典型的小白.今天就记录一下 一个mysql存储过程,里面需要分割字符串和 动态执行sql语句. 关于字符串 分割我开始使用 LOCA ...
- Queue depth
Queue depth - It is the number of I/O requests that can be kept waiting to be serviced in a port que ...