<C++>vector容器在算法题中应用那么广泛,确定不来深入了解一下吗_c++中vector用的多吗(1)

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
{
	cout << \*it << " ";
}
cout << endl;

}
void test()
{
vectorv1;
for (int i = 0; i < 10;i++)
{
v1.push_back(i);
}
PrintVector(v1);

//赋值 operator= 
vector<int>v2;
v2 = v1;
PrintVector(v2);

//assign
vector<int>v3;
v3.assign(v1.begin(), v1.end());//闭 开
PrintVector(v3);

//n个elem方式赋值
vector<int>v4;
v4.assign(6, 66);//6个66
PrintVector(v4);

}


**tips:vector赋值操作简单,直接使用等号和使用assign都可以**


### 容量和大小


* 对vector容器的容量和大小操作


**函数原型:**


* `empty();`判断容器是否为空
* `capacity();`容器中的容量大小
* `size();`返回容器中元素的个数
* `resize(int sum);`重新指定容器长度为num,容器变长以默认值填充,容器变短则超出部分删除
* `resize(int num,elem)`同上,区别是默认值填充变为elem值填充


**代码示例:**



void test()
{
vectorv1;
for (int i = 0; i < 10; i++)
{
v1.push_back(i);
}
if (v1.empty())
{
cout << “空” << endl;
}
else
{
cout << “不空” << endl;
}
cout << “v1的容量=” << v1.capacity() << endl;
cout << “v1的大小=” << v1.size() << endl;
//重新指定大小
v1.resize(10,666);//利用重载版本,可以指定默认填充值
v1.resize(5);
}


### 插入和删除


* 对vector容器进行插入、删除操作


**函数原型:**


* `push_back(e);`尾部插入元素e
* `pop_back();`删除最后一个元素
* `insert(const_iterator pos,e);`迭代器指向位置pos插入指定元素e
* `insert(const_iterator pos,int count ,e);` 插入count个指定元素e
* `erase(const_iterator pos);`删除迭代器指向的元素
* `erase(const_iterator begin,const_iterator end);`删除迭代器从begin到end之间的元素
* `clear();`清空容器内所有元素


**代码示例:**



void PrintVector(vector& v)
{
for (vector::iterator it = v.begin(); it != v.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}

void test()
{
vectorv1;
//尾插法
v1.push_back(10);
v1.push_back(20);
v1.push_back(50);

//遍历
PrintVector(v1);

//尾删
v1.pop\_back();
PrintVector(v1);

//插入
v1.insert(v1.begin(), 66);
PrintVector(v1);

v1.insert(v1.begin(), 2, 666);
PrintVector(v1);

//删除 参数也是迭代器
v1.erase(v1.begin());
//v1.erase(v1.begin(), v1.end());清空,同下
PrintVector(v1);

//清空
v1.clear();
PrintVector(v1);

}


### 数据存取


* 对vector中的数据进行存取操作


**函数原型:**


* `at(int index);`返回索引**index**指向的数据
* `operator[];`和普通数组取数据用法一致
* `front();`返回容器中第一个数据元素
* `back();`返回容器中最后一个数据元素


**代码示例:**



//vector容器 数据存取
void test()
{
vectorv1;
for (int i = 0; i < 6; i++)
{
v1.push_back(i);
}
//利用[]访问数组中的元素
for (int i = 0; i < v1.size(); i++)
{
cout << v1[i] << " ";
}
cout << endl;
//利用at方式访问元素
for (int i = 0; i < v1.size(); i++)
{
cout << v1.at(i) << " ";
}
cout << endl;
//获取第一个元素
cout << “第一个元素=” << v1.front() << endl;
//获取最后一个元素
cout << “最后一个元素=” << v1.back()<<endl;
}


**tips:除了迭代器可以访问容器元素,利用at和[]也可以**


### 互换容器


* 实现两个容器的元素互换
	+ 可以利用匿名对象有效缩减容器容量


**函数原型:**


* `swap(ans);`将ans与本身的元素互换


**代码示例:**



//元素互换的基本使用不再赘述,就是交换容器,着重分享巧用的方面
void test()
{
vectorv;
for (int i = 0; i < 10000; i++)
{
v.push_back(i);
}
cout << “容量” << v.capacity() << endl;
cout << “大小” << v.size() << endl;
v.resize(3);//重新指定大小
cout << “容量” << v.capacity() << endl;
cout << “大小” << v.size() << endl;
//巧用swap收缩内存
vector(v).swap(v);
cout << endl;
cout << “容量” << v.capacity() << endl;
cout << “大小” << v.size() << endl;
}


**我把上面最最要的一行代码进行解释:**`vector<int>(v).swap(v);`



> 
> `vector<int>(v)`中的(v)其实是一个`匿名对象`利用拷贝构造将v容器的值存进这个“**匿名容器**”内,但是他的容量是很小的;随后调用`swap(v)`,把v容器本来的指向指到这个匿名容器,直接让匿名容器承担数以万计的容量,然后编译器`自动销毁`匿名对象,巧妙缩减了容器的容量。
> 
> 
> 


### 预留空间


* 减少vector在动态扩展容量时的次数


**函数原型:**


* `reserve(int len);`容器预留len个元素长度,预留位置不初始化,元素不可访问


**代码示例:**



void test()
{
//vector容器 预留空间
vectorv1;
v1.reserve(666666);
int num = 0;//统计开辟次数
int* p = NULL;
for (int i = 0; i < 666666; i++)
{
v1.push_back(i);

	if (p != &v1[0])
	{
		p = &v1[0];
		num++;
	}
}
cout << num << endl;

}

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

;
}

[外链图片转存中…(img-7ziDhMAj-1715893069098)]
[外链图片转存中…(img-ODNukHUt-1715893069099)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值