C++入门3

文章介绍了C++标准库中的动态数组容器vector的使用,包括定义、初始化、元素操作等。同时,文章详细讨论了结构体和类的区别,如成员变量的访问权限,默认访问属性以及函数调用的方式,包括传值、传引用和指针。还提到了C++中的类组织规范,即头文件和实现文件的分离。
摘要由CSDN通过智能技术生成

一.vector简介

来自于一个标准库代表的是一个集合的概念和动态数组,可以把若干对象放在里面,但是类型必须是相同的。因此,他也称为容器。使用方法如下:

struct student {
	int num;
};
int main()
{
	vector<int> vjihe;//表示这个vjihe里面保存的是int数据
	vector<student> stulist;
	vector<vector<string>> strchuan;//可以但是,不提倡
	vector<int*> vjihe2;//也可以装指针,但是不可以放引用
	vector<int&> vjihe3;//因为引用不是对象,所以不能方

1.定义和初始化vector对象(空容器)

vector<string> mystr;//创建一个空的容器
	mystr.push_back("abcd");//push_back往容器里面放东西
	mystr.push_back("def");
	return 0;

2.元素拷贝的初始化方式

vector<string> mystr2(mystr);//相当于把mystr中元素拷贝进mystr2
	vector<string> mystr3 = mystr;//也起到相同的作用

3.C++11标准中,列表初始化的方法

vector<string>mystr4 = { "aaa","bbb","ccc" };

4.创建指定数量的元素,有元素数量概念的东西,一般都用圆括号

	vector<int> ijihe(15, -200);//创建15个int类型的元素,并且每一个元素的值是-200
	vector<string> sjihe(5, "Hello");//创建5个string类型的元素,每一个元素都是Hello
	vector<int> ijihe2(20);//创建20个int类型的数据,下标从0-19,但是都是0
	vector<string> ijihe3(5);//创建5个string类型的数据,都是""

一般()表示元素数量,{}表示元素内容

二.vector对象上的操作

对于vector容器,在我们常见的情况下都是不知道里面有多少个元素,因此我们常常只是创建一个空的容器。

vector<int> ivec;

push_back,用于在容器后追加元素

ivec.push_back(1);
	ivec.push_back(2);
	for (int i = 3; i < 100; i++)
	{
		ivec.push_back(i);
	}

size 返回容器里有多少个元素

cout << ivec.size() << endl;

clear.用来清空容器中的所有元素

	//ivec.clear();
	//cout << ivec.size() << endl;

v[n]:用于返回下标中的第n个元素,n是一个下表,表示返回值的位置

cout << ivec[1] << endl;

赋值:

	ivec2.push_back(111);//这个时候里面有一个111的值
	ivec2 = ivec;//这个时候是把ivec中的100个元素全部给ivec2,此时原本的111这个值被覆盖
	ivec2 = { 12,13,14,150 };//此时又被覆盖成了这个数组
	cout << ivec2.size() << endl;

==号和!=号,用于判断相等和不相等

两个容器相等,必须是所有元素数量相同,类型相同,对应位置相同。

	vector<int> ivec2;
	ivec2 = ivec;
	if (ivec == ivec2)
	{
		cout << "ivec==ivec2" << endl;
	}
	ivec2.push_back(12345);
	if (ivec != ivec2)
	{
		cout << "ivec!=ivec2" << endl;
	}
	ivec.clear();
	ivec2.clear();
	if (ivec == ivec2)
	{
		cout << "ivec==ivec2" << endl;
	}

范围for的应用:

	vector<int> vecvalue{ 1,2,3,4,5 };
	for (auto& vecitem : vecvalue)//对vecvalue起一个别名vecitem,然后引用其中的所有元素,并且用auto自动判断数据类型
	{
		vecitem *= 2;//扩大一倍变成 2,4,6,8,10
	}
	for (auto vecitem : vecvalue)
	{
		cout << vecitem << endl;
	}

进一步理解for语句

	for (auto& vecitem : vecvalue)
	{
		vecvalue.push_back(888);//就会导致报错,一定不要这么追加数值,很难查出来
		cout << vecitem << endl;//用范围for遍历这些值
	}

三.结构回顾,结构属于自定义的数据类型

结构体的定义:

struct student
{
	//成员变量
	int num;//学号
	char name[100];//学生名
};
int main()
{
	student student1;//定义结构变量,这里可以省略student1,直接使用student
	student1.num = 1001;
	strcpy_s(student1.name, sizeof(student1.name), "zhangsan");
	cout << student1.num << endl;
	cout << student1.name << endl;

调用方法一:

struct student
{
	//成员变量
	int num;//学号
	char name[100];//学生名
};
void func(student tmpstu)//结构变量为形参
{
	tmpstu.num = 2000;
	strcpy_s(tmpstu.name, sizeof(tmpstu), "who");
}
int main()
{
	student student1;//定义结构变量,这里可以省略student1,直接使用student
	student1.num = 1001;
	strcpy_s(student1.name, sizeof(student1.name), "zhangsan");
	cout << student1.num << endl;
	cout << student1.name << endl;
	func(student1);//效率低,因为实参传递给形参时发生了一个内存内容的复制
	cout << student1.num << endl;//值没有被函数改变
	cout << student1.name << endl;

上边的调用很慢,可以加引用会增加效率

struct student
{
	//成员变量
	int num;//学号
	char name[100];//学生名
};
void func(student &tmpstu)//形参变为引用
{
	tmpstu.num = 2000;
	strcpy_s(tmpstu.name, sizeof(tmpstu), "who");
}
int main()
{
	student student1;//定义结构变量,这里可以省略student1,直接使用student
	student1.num = 1001;
	strcpy_s(student1.name, sizeof(student1.name), "zhangsan");
	cout << student1.num << endl;
	cout << student1.name << endl;
	func(student1);//效率低,因为实参传递给形参时发生了一个内存内容的复制
	cout << student1.num << endl;//值没有被函数改变
	cout << student1.name << endl;

调用方式2,用指向结构体的指针做函数参数

struct student
{
	//成员变量
	int num;//学号
	char name[100];//学生名
};
void func(student *ptmpstu)//用指向结构体的指针做函数参数
{
	ptmpstu->num = 2000;
	strcpy_s(ptmpstu->name, sizeof(ptmpstu->name), "who");
}
int main()
{
	student student1;//定义结构变量,这里可以省略student1,直接使用student
	student1.num = 1001;
	strcpy_s(student1.name, sizeof(student1.name), "zhangsan");
	cout << student1.num << endl;
	cout << student1.name << endl;
	func(&student1);
	cout << student1.num << endl;

而且C++中结构体 不仅可以实现定义成员变量,还可以定义成员函数(在结构体里面直接写函数),如下:

struct student
{
	//成员变量
	int num;//学号
	char name[100];//学生名
	void func()//成员函数
	{
		num++;
		return;
	}
};
	student1.func();//调用成员函数

四.class

里面有三个权限修饰符,public,private,protect

public:用这个修饰符,修饰结构中的成员变量或者是成员函数,那么这些成员函数和成员对象是可以被外界访问的。

private,被这个修饰符修饰的成员函数和成员变量,只有被内部定义的成员函数和成员变量才可以被访问

而且一个类中可以有多个pubilc和private

struct student//public一般可以不加,默认都是公共属性
{
public:
	//成员变量
private:
	int num;//学号
	char name[100];//学生名
	void func()//成员函数,也叫方法
	{
		num++;
		return;
	}
};
int main()
{
	student student1;
	student1.num = 1001;
	strcpy_s(student1.name, sizeof(student1.name), "zhangsan");
	
	return 0;

.类结构:也是用户自定义的结构类型

我们知道,结构都是struct,类是class

那么结构和类的区别是:

1.在结构中我们把变量叫做结构变量,在类中我们把变量叫做对象,它们都可以表示为一段内存,内存中有一些东西。

2.在结构中,里面的成员函数和成员变量默认的访问权限都是公共属性;在类中,相反默认都是私有属性。

3.而对于继承来说也是同样如此。

五.类的组织(书写规范)

把类的定义代码都写在头文件上(.h)头文件名和类的名相同

类的具体实现代码放在.cpp文件中

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值