01 Essential C++ 第一章学习笔记

Essential C++ 第一章

1.如何撰写C++程序

输入和输出的语句为

#include<iostream>
int main()
{
    int a;
    cin>>a;
    cout<<a<<endl;
}

2.对象的初始化

对象的初始化有两种方法

(1)直接赋值法

int a = 3;

(2)初始化列表的方法

int a(3);

初始化列表的方法的出现是因为,有些变量不是单值的,比如说复数,包含实部和虚部,必须要使用两个变量进行初始化,所以就会有输入两个参数的问题,因此初始化列表是非常有价值的。

3.运算符

运算符主要包括算术运算符、关系运算符和逻辑运算符

其中,有一个比较好用的功能,属于算术运算符的范围,就是用条件表达式的方法给数据分行,比如想输出输出,5个分一行,就可以写做


cout<<data
    <<(num%5?' ':'\n');

4.array和Vector

主要写一下vector的初始化,有两种方法,一种是使用初始化列表的方法,一种是截取数组数据。

(1)初始化列表

Esential C++说vector不支持这种写法,但是VS是可以使用的。

#include<vector>
vector<int> vc[5] = {1,2,3,4,5}

不写中括号也行

(2)截取数组的方法

#include<vector>
vector<int> VC(array,array+size);

这是通过地址的方法实现的,括号中分别为首地址和末端地址。使用这种方法构造的vector与原来数组是独立的关系,不会因为修改了其中一个而改变另外一个。

5.指针

5.1 指针的使用

(1)指针初始化的时候如果没有绑定变量,应该初始化为空指针。


int *p = 0;

(2)指针用于判断时,应该避免使用空指针,因此应该使用短路运算进行


if(p&&*p!=1024)
    {
    }
}

当p为空指针是,其值为0,由于短路运算,后面那个表达式便不再计算,所以指针的表达式,应该先排除他不是空指针

(3)指针具有双重性。不但含有地址信息,而且能够访问地址指向的变量。这种功能叫做提领作用。

5.2指向vector的指针

定义为

vector<int> vec = {1,2,3,4,5}
vector<int> *p= &vec;

当有多个vector存在时,我们希望用指针的方式进行调用,可以采用索引的方式进行,之间如上面所示的直接调用,会丧失透明性,具体指代的对象可能不容易看出来,而使用索引的方式就能很好的看出来。

    //01定义一些vector
	vector<int> Fibonacci = {1,1,2,3,5,8,13,21};
	vector<int> Lucas = { 1,3,4,7,11,18,29,47 };
	vector<int> Pell = { 1,2,5,12,29,70,169,408 };

	//02 将这些类的指针地址组合在vector中
	vector<int>* p[3] = { &Fibonacci,&Lucas,&Pell };

	//03使用随机数去寻找这些vector
	srand(time(NULL));
	int index = rand() % 3;
	vector<int>* q = p[index];


	//04 打印选到的
	for (int i = 0; i < q->size(); i++)
	{
		cout << (*q)[i] << endl;
	}

5.3指向vector的指针的数据调用

我们假设要做这样一件事情,判断一个vector是否为空,如果不为空,第2个元素是否为0。

程序为

    vector<int>a = {1,0,2,3};
    
    if(!a.empty()&&a[1]===0)
    {
    
    }
}

如果是指向vector的指针怎么做这件事情呢?
这个判断主要做了两件事情,即访问了类的成员函数和成员变量。使用了点号(成员变量选择运算符)和中括号(索引符号)

vector<int> a = {1,0,2,3};

//01定义指针
vector<int> *p = &a;

//02调用成员函数
//成员函数的调用使用->
//写作:p->empty();

//03 调用成员变量
//因为索引优先级比指针运算符高,要加括号
//写作:(*p)[1]

//04 要注意判断指针不能为空指针的问题


//05 综上所述,上面的那句判断应该写作
if(p&&!p->empty()&&(*p)[1]==0)
{
    
}

6.文件操作

需要头文件 fstream

包括读写两方面

发布了14 篇原创文章 · 获赞 1 · 访问量 492

猜你喜欢

转载自blog.csdn.net/qq_41741344/article/details/105305585