【C++】STL---vector基本用法介绍

这篇具有很好参考价值的文章主要介绍了【C++】STL---vector基本用法介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

个人主页:平行线也会相交💪
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创
收录于专栏【C++之路】💌
本专栏旨在记录C++的学习路线,望对大家有所帮助🙇‍
希望我们一起努力、成长,共同进步。🍓
【C++】STL---vector基本用法介绍,C++之路,c++,开发语言,vector

vectorC++STL中的一种动态数组容器,用于存储和操作一系列的元素。
同时vector提供了灵活的大小调整、随机访问、连续存储、动态内存管理等特点。

注意使用vector前需要包含头文件#include<vector>
下面将对vector的常用语法作出详细的介绍。

一、vector初始化

1.1一般初始化方式

例1:创建一个具有5个整型元素的向量

//v1是一个具有5个int类型元素大小的向量
vector<int> v1(5);

例2:创建一个具有5个int类型元素大小的向量,并要将每个元素初始化成0。

//v2是一个具有5个int类型元素大小的向量,其中每个元素都是0
vector<int> v2(5, 0);

【C++】STL---vector基本用法介绍,C++之路,c++,开发语言,vector

例3:创建5个string类型的向量,并完成初始化操作。

vector<string> v(5, "C++");

【C++】STL---vector基本用法介绍,C++之路,c++,开发语言,vector

1.2利用迭代器进行初始化

例1:利用相同类型的迭代器进行初始化。

利用相同类型的迭代器进行初始化
vector<int> v1(10, 1);
vector<int> v2(v1.begin(), v1.end());
for (auto e : v2)
{
	cout << e << " ";
}

例2:利用不同类型的迭代器进行初始化。

//利用不同类型的迭代器进行初始化
string str("hello C++");

vector<int> v3(str.begin(), str.end());
vector<char> v4(str.begin(), str.end());

for(auto e : v3)
	cout << e << " ";
cout << endl;
for (auto e : v4)
	cout << e << " ";
cout << endl;

【C++】STL---vector基本用法介绍,C++之路,c++,开发语言,vector

1.3利用数组指针进行初始化

//利用数组指针进行初始化
int a[] = { 1,2,3,4 };
vector<int> v5(a, a + 4);

【C++】STL---vector基本用法介绍,C++之路,c++,开发语言,vector

二、vector的增删查改

2.1增添元素-push_back()

方法1:使用成员函数push_back()

vector<int> v3;
	v3.push_back(1);
	v3.push_back(2);
	v3.push_back(3);
	v3.push_back(4);

【C++】STL---vector基本用法介绍,C++之路,c++,开发语言,vector
方法2:使用for循环进行赋值

vector<int> v4;
for (int i = 0; i < 10; i++)
	v4.push_back(i);

【C++】STL---vector基本用法介绍,C++之路,c++,开发语言,vector

2.2删除元素-erase()

int a[] = { 1,3,5,7,9 };
vector<int> v(a, a + 5);
for (auto e : v)
{
	cout << e << " ";
}
cout << endl;

//删除第一个位置的值
v.erase(v.begin());
for (auto e : v)
{
	cout << e << " ";
}
cout << endl;

//删除第三个位置的值
v.erase(v.begin()+2);
for (auto e : v)
{
	cout << e << " ";
}
cout << endl;

【C++】STL---vector基本用法介绍,C++之路,c++,开发语言,vector

2.3某个位置插入元素-insert()

【C++】STL---vector基本用法介绍,C++之路,c++,开发语言,vector

int a[] = { 1,3,5,7,9 };
vector<int> v(a, a + 5);
for (auto e : v)
{
	cout << e << " ";
}
cout << endl;

v.insert(v.begin(), 100);
for (auto e : v)
{
	cout << e << " ";
}
cout << endl;

【C++】STL---vector基本用法介绍,C++之路,c++,开发语言,vector

2.4查找-find()

这里需要注意的是:

虽然vector容器本身没有直接提供查找函数即find的成员函数,但通过包含<algorithm>头文件,你可以使用find算法函数来在vector中查找元素。这是因为标准库提供了一种通用的查找函数,可以在各种容器中使用。

举个例子:

//查找元素
int a[] = { 0,2,4,6,8,10,12 };
vector<int> v(a, a + sizeof(a) / sizeof(a[0]));
for (auto e : v)
{
	cout << e << " ";
}
cout << endl;

vector<int>::iterator pos = find(v.begin(), v.end(), 8);
if (pos != v.end())
	v.erase(pos);
for (auto e : v)
{
	cout << e << " ";
}
cout << endl;

【C++】STL---vector基本用法介绍,C++之路,c++,开发语言,vector

三、vector迭代器的使用(iterator)

3.1遍历容器元素

vector<int> v5;
	v5.push_back(1);
	v5.push_back(2);
	v5.push_back(3);
	vector<int>::iterator it = v5.begin();
	while (it != v5.end())
	{
		cout << *it << " ";
		it++;
	}

【C++】STL---vector基本用法介绍,C++之路,c++,开发语言,vector

四、vector容器的常用算法

我们知道,容器可以用来存储数据,而算法就是对数据进行处理。通过容器也能能够访问其中存储的数据,所以我们可以通过容器来实现一些常用的算法。例如一些查找的算法、排序的算法。

4.1排序

例1:升序。

//升序
int a[] = { 15,9,29,3,50 };
vector<int> v(a, a + 5);
sort(v.begin(), v.end());
//sort(v.rbegin(), v.rend());使用反向迭代器,此时为降序
for (auto e : v)
	cout << e << " ";
cout << endl;

例2:降序。

greater<int> g;
sort(v.begin(), v.end(), g);
//sort(v.rbegin(), v.rend());使用反向迭代器,此时为升序
for (auto e : v)
	cout << e << " ";
cout << endl; 

降序这里我们其实没有必要传greater<int> g这个有名对象,这里完全可以用匿名对象来实现。
sort(v.begin(), v.end(), greater<int>());

【C++】STL---vector基本用法介绍,C++之路,c++,开发语言,vector

例3:对string类型的对象进行排序。

string str("hello world");
sort(str.begin(), str.end());
cout << str << endl;

【C++】STL---vector基本用法介绍,C++之路,c++,开发语言,vector

五、vector容量操作

5.1reserve

reserve函数用于预留一定的容量空间,以提高向vector中添加元素的效率。它通常在你知道vector将存储大量元素时使用,可以避免不必要的重新分配和复制元素。

这里有一点非常重要调用reserve函数不会改变vector的大小(即size()的返回值),只会影响vector的容量(即capacity()的返回值)。

错误案例演示

下面举一个错误案例

//这是一个错误案例
vector<int> v1;
v1.reserve(10);
for (size_t i = 0; i < 10; i++)
{
	v1[i] = i;
}

v1[i] = i中的[]操作会先对size进行检查,即assert(i < _size);。而上述代码中的size是0,执行完v1.reserve(10);之后只是改变了capacity,并不会对size进行改变。经过assert(i < _size);的检查之后当然会报错了。

但是如果我们依然要使用reserve的话,我们应该这样去使用,请看:

vector<int> v;
v.reserve(10);
for (size_t i = 0; i < 10; i++)
{
	v.push_back(i);
	cout << v[i];
}

【C++】STL---vector基本用法介绍,C++之路,c++,开发语言,vector

5.2resize

resize函数用于改变vector的大小(即改变size),可以增加或减少元素的数量。当增加大小时,新的元素会使用默认值进行初始化。

调用vector的resize函数会同时改变size和capacity

vector<int> v1;
v1.resize(10);
for (size_t i = 0; i < 10; i++)
{
	v1[i] = i;
}

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

【C++】STL---vector基本用法介绍,C++之路,c++,开发语言,vector
【C++】STL---vector基本用法介绍,C++之路,c++,开发语言,vector

关于reserve函数和resize函数要时刻注意sizecapacity的变化。开辟了空间(capacity)后不一定可以对其内容进行访问,因为有时可能会对size的大小进行检查,比如[]

好了,以上就是本文的全部内容,主要对vector的一些基本语法和用法进行了介绍。
就到这里吧,再见啦友友们!!!
文章来源地址https://www.toymoban.com/news/detail-585671.html

到了这里,关于【C++】STL---vector基本用法介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C++庖丁解牛】STL之vector容器的介绍及使用 | vector迭代器的使用 | vector空间增长问题

    🍁你好,我是 RO-BERRY 📗 致力于C、C++、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 vector的文档介绍 vector是表示可变大小数组的序列容器。 就像数组一样,vector也采用的连续存储空间来存

    2024年03月14日
    浏览(79)
  • 【C++】vector基本接口介绍

    vector接口目录: 一、vector的初步介绍 1.1vector和string的联系与不同 1.2 vector的源码参数 二、vector的四种构造(缺省+填充元素+迭代器+拷贝构造) 三、vecto的扩容操作与机制 3.1resize(老朋友了,不会就去看string ) reserve  3.2 reserve的扩容机制 3.3 vector和malloc分别实现动态开辟的二

    2024年02月08日
    浏览(45)
  • 【STL】:vector用法详解

    朋友们、伙计们,我们又见面了,本期来给大家解读一下有关vector的基础用法,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏: C语言:从入门到精通 数据结构专栏: 数据结构 个  人  主  页 : stackY、 C + + 专 栏   : C++ Linux 专

    2024年02月08日
    浏览(41)
  • C++STL第二篇(vector的原理用法)

    vector的数据安排以及操作方式,与array非常相似,两者的唯一差别在于空间的运用的灵活性。Array是静态空间,一旦配置了就不能改变,要换大一点或者小一点的空间,可以,一切琐碎得由自己来,首先配置一块新的空间,然后将旧空间的数据搬往新空间,再释放原来的空间。

    2024年03月10日
    浏览(43)
  • 【C++】STL---vector

    vector 是表示可变大小数组的序列容器。 就像数组一样, vector 也采用的连续存储空间来存储元素。也就是意味着可以采用下标对 vector 的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自 动处理。 本质讲, vector 使用动

    2024年02月11日
    浏览(37)
  • C++ STL vector

    目录 一.认识vector 二.vector的使用 1.vector的构造函数 2.vector的迭代器 2.1 begin(),end() 2.2 rbegin(),rend() 2.3 迭代器初始化对象  3. vector 增删查改 3.1push_back(),pop_back() 3.2  insert(),erase() 3.3 operator[]  4.vector 空间控制 4.1 size(),capacity(),empty() 4.2 r

    2024年02月13日
    浏览(40)
  • 【C++STL精讲】vector的基本使用与常用接口

    🌸作者简介: 花想云 ,在读本科生一枚,致力于 C/C++、Linux 学习。 🌸 本文收录于 C++系列 ,本专栏主要内容为 C++ 初阶、C++ 进阶、STL 详解等,专为大学生打造全套 C++ 学习教程,持续更新! 🌸 相关专栏推荐: C语言初阶系列 、 C语言进阶系列 、 数据结构与算法 在 数据

    2023年04月25日
    浏览(40)
  • STL 关于vector的细节,vector模拟实现【C++】

    _start指向容器的头,_finish指向容器当中 有效数据 的下一个位置,_endofstorage指向整个容器的尾 先开辟一块与该容器大小相同的空间,然后将该容器当中的数据一个个拷贝过来即可,最后更新_finish和_endofstorage的值即可。 深拷贝版本一: 注意: 不能使用memcpy函数 , 如果vec

    2024年02月15日
    浏览(45)
  • 【C++ STL】vector模拟实现

    2023年05月17日
    浏览(51)
  • C++ STL vector 模拟实现

    ✅1主页:我的代码爱吃辣 📃2知识讲解:C++之STL 🔥3创作者:我的代码爱吃辣 ☂️4开发环境:Visual Studio 2022 💬5前言:上次我们已经数字会用了vector,这次我们对其底层更深一步挖掘,其中重点是,Vector中一些深浅拷贝问题。 目录 一.Vector模拟实现的整体框架 二. Vector的构

    2024年02月13日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包