C++ STL vector

这篇具有很好参考价值的文章主要介绍了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 resize(),reserve()


一.认识vector

  1. vector是表示可变大小数组的序列容器。
  2. 就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。
  3. 本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。就时间而言,这是一个相对代价高的任务,因为每当一个新的元素加入到容器的时候,vector并不会每次都重新分配大小。
  4. vector分配空间策略:vector会分配一些额外的空间以适应可能的增长,因为存储空间比实际需要的存储空间更大。不同的库采用不同的策略权衡空间的使用和重新分配。但是无论如何,重新分配都应该是对数增长的间隔大小,以至于在末尾插入一个元素的时候是在常数时间的复杂度完成的。
  5. 因此,vector占用了更多的存储空间,为了获得管理存储空间的能力,并且以一种有效的方式动态增长。
  6. 与其它动态序列容器相比(deque, list and forward_list), vector在访问元素的时候更加高效,在末尾添加和删除元素相对高效。对于其它不在末尾的删除和插入操作,效率更低。比起list和forward_list统一的迭代器和引用更好。

使用STL的三个境界:能用,明理,能扩展 ,那么下面学习vector,我们也是按照这个方法去学习。

二.vector的使用

vector学习时一定要学会查看文档:vector 使用文档 vector的文档介绍,vector在实际中非常的重要,在实际中我们熟悉常见的接口就可以,下面列出了哪些接口是要重点掌握的。

1.vector的构造函数

C++ STL vector,C++,c++,开发语言

 vector支持使用默认构造函数,同时支持模板:

	//<int> 模板类型,存储int的顺序表
	vector<int> v1;
	//存储string的顺序表
	vector<string> v2;
	//存储double的顺序表
	vector<double> v3;
	//存储char的顺序表
	vector<char> v4;

vector 也支持构造并且初始化:


	//构造一个 vector开10个int空间,并全部初始化为2
	vector<int> v1(10, 2);

支持拷贝构造,使用已经创建的对象初始化新的对象:

	//拷贝构造初始化
	vector<int> v2(v1);

2.vector的迭代器

vector容器也是可以使用迭代器的。有了迭代器范围for也就可以使用了。

2.1 begin(),end()

begin()获取第一个数据位置的 iterator/const_iteratorend() 获取最后一个数据的下一个位置的iterator/const_iterator。

	//构造一个 vector开10个int空间,并全部初始化为123
	vector<int> v1(10, 123);
	//vector 迭代器
	//auto it =v1.begin();
	vector<int>::iterator it = v1.begin();
	
	while (it != v1.end())
	{
		cout << *it << " ";
		it++;
	}
	cout << endl;

C++ STL vector,C++,c++,开发语言

 2.2 rbegin(),rend()

rbegin()获取最后一个数据位置的 reverse_iteratorrend()获取第一个数据前一个位置的reverse_iterator

C++ STL vector,C++,c++,开发语言

	//构造一个 vector开10个int空间,并全部初始化为123
	vector<int> v1(10, 123);
	//vector 反向迭代器
	//auto rit =v1.rbegin();

	vector<int>::reverse_iterator rit = v1.rbegin();

	while (rit != v1.rend())
	{
		cout << *rit << " ";
		rit++;
	}

C++ STL vector,C++,c++,开发语言

2.3 迭代器初始化对象

vector也是支持迭代器区间初始化,而且初始化使用的迭代器区间不仅仅可以是vector的迭代器,也可以是其他容器的迭代器区间,但是要支持数据类型的转换。例如:

	string str("hello C++");
	vector<int> v1(10,2);
	vector<int> v2(v1.begin(), v1.end() - 5);
    //string的迭代器区间初始化
	vector<int> v3(str.begin(), str.end());
	for (auto e : v2)
	{
		cout << e<<" ";
	}
	cout << endl;
	for (auto e : v3)
	{
		cout << e << " ";
	}

C++ STL vector,C++,c++,开发语言

 3. vector 增删查改

3.1push_back(),pop_back()

push_back()提供可以在vector尾部插入数据的功能。pop_back()提供可以在尾部删除数据的功能。

	vector<int> v1;
	v1.push_back(10);
	v1.push_back(20);
	v1.push_back(30);
	v1.push_back(40);
	v1.push_back(50);
	v1.push_back(60);
	for (auto e : v1)
	{
		cout << e << " ";
	}
	cout << endl;
	v1.pop_back();
	v1.pop_back();
	for (auto e : v1)
	{
		cout << e << " ";
	}

C++ STL vector,C++,c++,开发语言

 3.2  insert(),erase()

C++ STL vector,C++,c++,开发语言

 insert支持在某一个迭代器位置 position 后进行插入一个val,或者在一个迭代器位置position ,插入 n 个val,也支持使用一段迭代器区间去插入,使用的迭代器区间可以是其他容器的迭代器区间,但是要支持数据类型的转换。

C++ STL vector,C++,c++,开发语言

 erase提供了删除某一个迭代器位置的值,或者某一段迭代器区间的值。

vector<int> v1;
	//尾插 30 40 50 60
	v1.push_back(30);
	v1.push_back(40);
	v1.push_back(50);
	v1.push_back(60);
	for (auto e : v1)
	{
		cout << e << " ";
	}
	cout << endl;
	//在beginw位置之前插入20 10
	v1.insert(v1.begin(), 20);
	v1.insert(v1.begin(), 10);
	for (auto e : v1)
	{
		cout << e << " ";
	}
	cout << endl;
	//删除尾部的两个数据
	v1.erase(v1.end()-1);
	v1.erase(v1.end()-1);
	for (auto e : v1)
	{
		cout << e << " ";
	}

C++ STL vector,C++,c++,开发语言

 3.3 operator[]

[ ]运算符的重载,支持 vector 像数组一样访问。

	vector<int> v1;
	//尾插 30 40 50 60
	v1.push_back(30);
	v1.push_back(40);
	v1.push_back(50);
	v1.push_back(60);

	for (int i = 0; i < v1.size(); i++)
	{
		cout << (v1[i]+=10) << " ";
	}

 C++ STL vector,C++,c++,开发语言

 4.vector 空间控制

4.1 size(),capacity(),empty()

size(),返回当前vector存储的数据个数。

capacity()返回当前vector的容量。

empty()判断当前容量是否为空。

4.2 resize(),reserve()

resize 修改当前 vector 的有效数据尾个数,可以增加也可以减少。resize 还可以开空间的同时并初始化,如果 resize 的大小比原 vector size 小是不会影响到容量的大小。如果 resize 的大小比原 vector sizevector 会进行扩容。

	vector<int> v1;
	//尾插 30 40 50 60
	v1.push_back(30);
	v1.push_back(40);
	v1.push_back(50);
	v1.push_back(60);

	v1.resize(2);
	for (int i = 0; i < v1.size(); i++)
	{
		cout << v1[i] << " ";
	}

C++ STL vector,C++,c++,开发语言

 resize 开空间并初始化:

	vector<int> v1;
	//开10个空间,并且全部初始化为 5
	v1.resize(10, 5);

	for (int i = 0; i < v1.size(); i++)
	{
		cout << v1[i] << " ";
	}

C++ STL vector,C++,c++,开发语言

 reserve可以进行扩充vector的容量,但是并不会初始化开的空间。但是 reserve 并不会缩容。

C++ STL vector,C++,c++,开发语言文章来源地址https://www.toymoban.com/news/detail-647983.html

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

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

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

相关文章

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

    个人主页:平行线也会相交💪 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【C++之路】💌 本专栏旨在记录C++的学习路线,望对大家有所帮助🙇‍ 希望我们一起努力、成长,共同进步。🍓 vector 是 C++STL 中的一种 动态数组容器 ,用于存储和

    2024年02月16日
    浏览(47)
  • C++ —— STL容器【vector】模拟实现

    本章代码gitee仓库:vector模拟实现、vector源码 看源码发现 vector 是类模板定义的,成员是采用迭代器进行管理 当涉及到容器类时,通常有一些关键函数,如构造函数、析构函数和拷贝构造函数,它们负责初始化容器对象、销毁对象和进行对象的拷贝等 这里注意拷贝构造要实现

    2024年02月16日
    浏览(46)
  • 【C++ STL】vector基础知识

    2023年05月29日
    浏览(51)
  • C++【STL】之vector的使用

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

    2024年02月09日
    浏览(50)
  • C++ [STL之vector模拟实现]

    本文已收录至《C++语言》专栏! 作者:ARMCSKGT vector是STL容器容器之一,其底层实现类似于数据结构顺序表,相当于string来说得益于泛型模板的加持使得vector可以变为任何类型,且是可以动态扩容,堪称大号数组!在vector的实现中,有许多值得我们学习的细节,接下来将为大家

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

    vector 是我们学习的第一个真正的 STL 容器,它接口的使用方式和 string 有一点点的不同,但大部分都是一样的,所以这里我们就只演示其中一些接口的使用,大家如果有疑惑的地方直接在 cplusplus 是上面查看对应的文档即可。 vector 提供了四种构造方式 – 无参构造、n 个 val 构

    2023年04月27日
    浏览(45)
  • C++ [STL之vector的使用]

    本文已收录至《C++语言》专栏! 作者:ARMCSKGT vector是可变大小的数组序列容器,一般也叫向量;底层原理是顺序表,但是vector是泛型容器,可以支持int,double甚至自定义类型的存储,在平时应用非常频繁且广阔,vector在很多场景下可以提高我们的开发效率,所以学习vector这一

    2024年02月06日
    浏览(46)
  • 【C++入门到精通】C++入门 —— vector (STL)

    前面我们讲了C语言的基础知识,也了解了一些数据结构,并且讲了有关C++的命名空间的一些知识点以及关于C++的缺省参数、函数重载,引用 和 内联函数也认识了什么是类和对象以及怎么去new一个 ‘对象’ ,也相信大家都掌握的不错,接下来博主将会带领大家继续学习有关

    2024年02月13日
    浏览(49)
  • C++ STL学习之【vector的使用】

    ✨个人主页: Yohifo 🎉所属专栏: C++修行之路 🎊每篇一句: 图片来源 The power of imagination makes us infinite. 想象力的力量使我们无限。 vector 是表示可变大小数组的序列 容器 ,其使用的是一块 连续 的空间,因为是动态增长的数组,所以 vector 在空间不够时会扩容; vector 优点

    2023年04月09日
    浏览(63)
  • C++中STL的vector扩容机制

    前阵子面试的时候,被问到往vector中插入一个数据可能会发生什么? 我答:可能会 扩容 ; 为啥vector支持变长? 我答:它实在堆上动态申请内存,因此有自己的一套扩容机制,可以操作内存大小; 它有size()和capacity()记录当前的有效元素个数和容量, 还有配套的resize()管理实际存放

    2024年02月20日
    浏览(31)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包