【C++】vector介绍

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

个人主页 : zxctscl
如有转载请先通知

1. 前言

在之前已经介绍了string类 【C++】string类初步介绍和【C++】string进一步介绍,这次来看看C++中的顺序表vector。

2. vector的介绍

【C++】vector介绍,开启C++之路,c++,开发语言

  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学习时一定要学会查看文档。

3. Member functions

【C++】vector介绍,开启C++之路,c++,开发语言

3.1 (constructor)

构造
【C++】vector介绍,开启C++之路,c++,开发语言
【C++】vector介绍,开启C++之路,c++,开发语言

构造有: vector<int> v;

   vector<int> v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);
	for (size_t i = 0; i < v.size(); i++)
	{
		cout << v[i] << " ";
	}
	cout << endl;

【C++】vector介绍,开启C++之路,c++,开发语言
还有在构造的时候直接赋值vector<int>v(10, 1);构造一个int类型的顺序表开了10个空间,这10个空间初始化为1:
【C++】vector介绍,开启C++之路,c++,开发语言

3.2 (destructor)

【C++】vector介绍,开启C++之路,c++,开发语言
【C++】vector介绍,开启C++之路,c++,开发语言

4. Capacity

【C++】vector介绍,开启C++之路,c++,开发语言

4.1 resize

【C++】vector介绍,开启C++之路,c++,开发语言
resize开一个空间,空间开好了以后,进行填值初始化。

举个例子:开10个空间,然后初始化为0:

    vector<int> a;
	a.resize(10, 0);
	for (auto e : a)
	{
		cout << e << " ";
	}
	cout << endl;

【C++】vector介绍,开启C++之路,c++,开发语言

4.2 reserve

【C++】vector介绍,开启C++之路,c++,开发语言
来看看vector的扩容机制:

void test_vector2()
{
	size_t sz;
	vector<int> v;
	sz = v.capacity();
	cout << "making v grow:\n";
	for (int i = 0; i < 100; ++i)
	{
		v.push_back(i);
		if (sz != v.capacity())
		{
			sz = v.capacity();
			cout << "capacity changed: " << sz << '\n';
		}
	}
}

【C++】vector介绍,开启C++之路,c++,开发语言
这里是以1.5倍扩容,不过这里取整了。
如果不想扩容发生,就用reserve提前先开好空间。

void test_vector2()
{
	size_t sz;
	vector<int> v;
	v.reserve(100);
	sz = v.capacity();
	cout << "making v grow:\n";
	for (int i = 0; i < 100; ++i)
	{
		v.push_back(i);
		if (sz != v.capacity())
		{
			sz = v.capacity();
			cout << "capacity changed: " << sz << '\n';
		}
	}
}

这样就不用扩容了:
【C++】vector介绍,开启C++之路,c++,开发语言
【C++】vector介绍,开启C++之路,c++,开发语言

一般来说resize和reserve都不会缩容:

size_t sz;
	vector<int> v;
	v.reserve(100);
	cout << v.size() << endl;
	cout << v.capacity() << endl;
	v.reserve(10);
	cout << v.size() << endl;
	cout << v.capacity() << endl;
	
	cout << "-----------------" << endl;
	cout << v.size() << endl;
	cout << v.capacity() << endl;
	v.resize(10);
	cout << v.size() << endl;
	cout << v.capacity() << endl;

【C++】vector介绍,开启C++之路,c++,开发语言

4.3 shrink_to_fit

要想缩容就调用这个接口shrink_to_fit
【C++】vector介绍,开启C++之路,c++,开发语言

    
	vector<int> v;
	v.reserve(100);
	cout << v.size() << endl;
	cout << v.capacity() << endl;
	v.reserve(10);
	cout << v.size() << endl;
	cout << v.capacity() << endl;
	
	cout << "-----------------" << endl;
	cout << v.size() << endl;
	cout << v.capacity() << endl;
	v.resize(10);
	cout << v.size() << endl;
	cout << v.capacity() << endl;

	cout << "-----------------" << endl;
	v.shrink_to_fit();
	cout << v.size() << endl;
	cout << v.capacity() << endl;

这样就实现了缩容:
【C++】vector介绍,开启C++之路,c++,开发语言

5. vector 增删查改

5.1 push_back

【C++】vector介绍,开启C++之路,c++,开发语言
vector只支持单个数据的尾插。
直接来看看代码:

#include<iostream>
using namespace std;

#include<vector>
int main()
{
	vector<int> v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);
	for (size_t i = 0; i < v.size(); i++)
	{
		cout << v[i] << " ";
	}
	cout << endl;

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

【C++】vector介绍,开启C++之路,c++,开发语言

5.2 insert

【C++】vector介绍,开启C++之路,c++,开发语言
来试试头插:

    vector<int> v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);
	v.push_back(5);
	for (auto e : v)
	{
		cout << e << " ";
	}
	cout << endl;

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

【C++】vector介绍,开启C++之路,c++,开发语言
也可以插入一段迭代区间:

    vector<int> v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);
	v.push_back(5);
	for (auto e : v)
	{
		cout << e << " ";
	}
	cout << endl;

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

	string s("abcd");
	v.insert(v.begin(), s.begin(),s.end());
	for (auto e : v)
	{
		cout << e << " ";
	}
	cout << endl;

这里隐私类型转换,将abcd转换为对应的ascii值:
【C++】vector介绍,开启C++之路,c++,开发语言

5.3 pop_back

尾删
【C++】vector介绍,开启C++之路,c++,开发语言
来看看代码:

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

	for (size_t i = 0; i < v.size(); i++)
	{
		cout << v[i] << " ";
	}
	cout << endl;

	v.pop_back();
	for (size_t i = 0; i < v.size(); i++)
	{
		cout << v[i] << " ";
	}
	cout << endl;

	v.pop_back();
	for (size_t i = 0; i < v.size(); i++)
	{
		cout << v[i] << " ";
	}
	cout << endl;

【C++】vector介绍,开启C++之路,c++,开发语言

5.4 find

【C++】vector介绍,开启C++之路,c++,开发语言
在vector里面发现没有find,如果我们想要使用find来查找,那么就得用到算法库里面的就行。使用它得包含一个头文件:#include<algorithm>
【C++】vector介绍,开启C++之路,c++,开发语言
举个例子:在3位置插入30

#include<iostream>
#include<algorithm>
using namespace std;
#include<vector>
int main()
{
    vector<int> v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);
	v.push_back(5);
	for (auto e : v)
	{
		cout << e << " ";
	}
	cout << endl;

	vector<int>::iterator pos=find(v.begin(), v.end(), 3);
	if (pos != v.end())
	{
		v.insert(pos, 30);
	}

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

【C++】vector介绍,开启C++之路,c++,开发语言

5.5 erase

【C++】vector介绍,开启C++之路,c++,开发语言
举个例子删除3位置:

    vector<int> v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);
	v.push_back(5);
	for (auto e : v)
	{
		cout << e << " ";
	}
	cout << endl;

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

【C++】vector介绍,开启C++之路,c++,开发语言

有问题请指出,大家一起进步!!!文章来源地址https://www.toymoban.com/news/detail-849997.html

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

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

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

相关文章

  • 【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)
  • 【C++】vector的介绍与使用

      🧑‍🎓 个人主页:简 料   🏆 所属专栏:C++   🏆 个人社区:越努力越幸运社区   🏆 简       介: 简料简料,简单有料~在校大学生一枚,专注C/C++/GO的干货分享,立志成为您的好帮手 ~ C/C++学习路线 (点击解锁) ❤️ C语言 ❤️ 初阶数据结构与算法 ❤️ C++ ❤️

    2024年02月04日
    浏览(43)
  • [C++]vector的介绍及使用

    目录 C++:vector的使用                 1.vector的定义方式                 2.vector的空间增长                         size和capacity                         reserve和resize                         empty                 3.ve

    2024年02月08日
    浏览(45)
  • C++关于vector的详细介绍

    vector底层本质就是一个顺序表,它是一个可变长的数组,采用连续存储的空间来存储数据,它的元素类型也可以是任意的内置类型或者自定义类型。 第一种方式: 定义一个任意类型的空vector 第二种方式: 定义一个任意类型的vector,并用n个val来初始化vector 第三种方式: 定义

    2024年02月06日
    浏览(42)
  • 【C++】STL---vector基本用法介绍

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

    2024年02月16日
    浏览(46)
  • 【C++】——vector的介绍及模拟实现

    上一篇文章我们学习了C++中string类的使用和模拟实现,string是一种表示字符串的字符串类今天我们来继续学习C++中的另一种容器:vector。 1.vector是表示可变大小数组的序列容器。 2.就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元

    2024年02月08日
    浏览(34)
  • 【C++初阶】第九站:vector的介绍及使用

    前言: 🎯个人博客:Dream_Chaser 🎈博客专栏:C++ 📚本篇内容:vector的介绍及使用 ​ 目录 一、vector的介绍 二、vector的使用 1.vector的定义 2.vector iterator(迭代器)的使用 begin和end(正向迭代器) rbegin和rend(反向迭代器) 3.vector 空间增长问题 size和capacity max_size reserve和resize empty 4.ve

    2024年04月25日
    浏览(34)
  • C++面试:向量vector和列表list介绍

    目录 vector list  list和vector的区别 1. 底层实现: 2. 动态性和静态性: 3. 内存管理: 4. 迭代器和指针: 5. 访问效率: 6. 适用场景:   std::vector 是 C++ STL 提供的动态数组容器,提供了多种操作。以下是一些常见的 std::vector 操作,一一列举出来 初始化和基本操作 插入和删除元

    2024年01月22日
    浏览(33)
  • 【C++庖丁解牛】STL之vector容器的介绍及使用 | vector迭代器的使用 | vector空间增长问题

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

    2024年03月14日
    浏览(79)
  • 【C++初阶】C++STL详解(三)—— vector的介绍及使用

    ​ ​📝个人主页:@Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:C++学习 🎯 长路漫漫浩浩,万事皆有期待 上一篇博客:【C++】string类常见题目详解(二) —— 把字符串转换成整数、反转字符串、反转字符串 II、反转字符串中的单词 III、字符

    2024年02月11日
    浏览(47)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包