C++第六讲:STL--vector的使用及模拟实现

1.vector简介

vertor是一个真正的容器,底层实现是一个动态开辟的数组:
在这里插入图片描述
所以说我们可以将vector简单地理解成:
在这里插入图片描述

vector的一些接口的使用和string相同,所以对于那些简单的使用,就一笔带过,本文详细要讲的还是vertor的模拟实现,以及一些其它的科普知识

2.vector的常见接口介绍

尽管不会详细讲述接口的作用,但是还是会讲接口一一列出来

2.1constructor – 构造

构造的使用:

int main()
{
   
	vector<int> first;//使用vector模板实例化一个对象
	vector<int> second(4, 100);//4个数据,每个数据为100
	vector<int> third(second.begin(), second.end());//迭代器区间初始化
	vector<int> forth(second);//拷贝初始化

	return 0;
}

这些都是一些简单的构造,要着重处理的是:
在这里插入图片描述
使用initializer_list进行初始化:

int main()
{
   
	vector<int> v = {
    10, 20, 30, 40 };//使用数组进行初始化
	vector<int> v1({
    20, 30, 40 });//和上面的功能是一样的
	//使用数组初始化的底层其实是遍历数组,将数组中的元素一个一个地尾插到vector中

	//auto il1 = { 1, 2, 3, 4, 5, 6 };
	//initializer_list<int> il2 = { 1, 2, 3, 4, 5, 6 };//等价于上面的auto
	//int a[] = { 1, 2, 3, 4, 5, 6 };

	return 0;
}

2.2destructor – 析构

2.3begin、end

迭代器,使用起来也十分简单:

int main()
{
   
	vector<int> v({
    1, 2, 3, 4, 5, 6, 7, 8, 9 });
	//这表明迭代器的范围应该在vector<int>中,这样就可以更加清楚地理解迭代器了
	vector<int>::iterator it = v.begin();
	while (it != v.end())
	{
   
		cout << *it << " ";
		it++;
	}
	cout << endl;//1 2 3 4 5 6 7 8 9

	return 0;
}

既然有了迭代器,那么就可以使用范围for:

int main()
{
   
	vector<int> v({
    1, 2, 3, 4, 5, 6, 7, 8, 9 });
	for (auto e : v)
	{
   
		cout << e << " ";
	}
	cout << endl;//1 2 3 4 5 6 7 8 9

	return 0;
}

2.3.1vector和string的区别、vector

下面还有一种使用范围for时需要注意的地方:

int main()
{
   
	//看下面两个有什么区别:
	vector<char> v;
	string s1;
	//1.vector中没有关于字符串的概念,只有尾插和尾删,所以并不能直接插入一个字符串,而string中能
	//2.vector中并没有对于字符串特有的操作,比如连接、查找子串、替换子串等
	//3.vector中不仅能存储字符数据,还能够针对于其它任何类型的数据,而string是专门处理字符的类

	return 0;
}
int main()
{
   
	//但是我们可以这样写:
	vector<string> v;
	//这样就可以使用针对字符串的操作了:
	string s1 = "张三";
	v.push_back(s1);
	v.push_back("李四");

	for (auto e : v)
	{
   
		cout << e << " ";
	}
	cout << endl;

	v[0] += 'x';//这里使用的是string中的+=,因为v[0]就是一个string类的对象
	v[0] += "apple";
	for (auto e : v)
	{
   
		cout << e << " ";
	}
	cout << endl;

	//v[0][0]++;//张 -》 峙
	//C++中,对于汉字的编码,是通过汉字的后一个字节来将相同读音的汉字排在一起的
	v[0][1]++;//张 -》 掌
	v[0][1]++;//掌 -》 涨
	for (auto e : v)
	{
   
		cout << e << " ";
	}
	cout << endl;

	return 0;
}

但是这里会出现问题:

评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值