网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事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;
}
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
;
}
[外链图片转存中…(img-7ziDhMAj-1715893069098)]
[外链图片转存中…(img-ODNukHUt-1715893069099)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新