【C++】vector 基本使用(详解)

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

目录

一,vector 的介绍

二,vector 的定义

1,vector()

2,vector(size_type n, const value_type& val = value_type())

3,vector (const vector& x)

4,vector (InputIterator first, InputIterator last);

三,vector iterator 的使用

1,begin + end

2,rbegin + rend 

四,vector 空间增长问题

1,size

2,capacity

3,empty

4,reserve

5,resize

五,vector 增删查改

1,push_back

2,pop_back 

3,find

4,insert

5,erase

6,swap

7,operator[]


【C++】vector 基本使用(详解),C++,c++,开发语言,动态规划,迭代加深

一,vector 的介绍

1,vector 是表示可变大小数组的序列容器。

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

3,本质讲,vector 使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。就时间而言,这是一个相对代价高的任务,因为每当一个新的元素加入到容器的时候,vector 并不会每次都重新分配大小。

4,vector 分配空间策略:vector 会分配一些额外的空间以适应可能的增长,因为存储空间比实际需要的存储空间更大。不同的库采用不同的策略权衡空间的使用和重新分配。但是无论如何,重新分配都应该是对数增长的间隔大小,以至于在末尾插入一个元素的时候是在常数时间的复杂度完成的。

5,因此,vector 占用了更多的存储空间,为了获得管理存储空间的能力,并且以一种有效的方式动态增长。

6,与其它动态序列容器相比(deque, list and forward_list), vector 在访问元素的时候更加高效,在末尾添加和删除元素相对高效。对于其它不在末尾的删除和插入操作,效率更低。比起listforward_list 统一的迭代器和引用更好。

二,vector 的定义

1,vector()

无参构造

#include<iostream>
#include<vector>
using namespace std;

int main()
{
	vector<int> v1;
	return 0;
}

【C++】vector 基本使用(详解),C++,c++,开发语言,动态规划,迭代加深

这里我们定义一个 vector 类,它里面的各种数据都是初始化了的,不是空就是0;

2,vector(size_type n, const value_type& val = value_type())

构造并初始化 n 个 val

#include<iostream>
#include<vector>
using namespace std;

int main()
{
	vector<int> v1(5, 6);
	for (int i = 0; i < 5; i++)
	{
		cout << v1[i]<<" ";
	}

	return 0;
}

【C++】vector 基本使用(详解),C++,c++,开发语言,动态规划,迭代加深

直接自己定义初始化成 n 个 val;

3,vector (const vector& x)

拷贝构造

#include<iostream>
#include<vector>
using namespace std;

int main()
{
	vector<int> v1(5, 6);
	vector<int> v2(v1);
	for (int i = 0; i < 5; i++)
	{
		cout << v2[i]<<" ";
	}

	return 0;
}

【C++】vector 基本使用(详解),C++,c++,开发语言,动态规划,迭代加深

拷贝构造嘛,都老朋友了;

4,vector (InputIterator first, InputIterator last);

使用迭代器进行初始化构造

#include<iostream>
#include<vector>
using namespace std;

int main()
{
	vector<int> v1(5,6);
	for (int i = 0; i < 5; i++)
	{
		v1[i] = i;
	}

	vector<int> v2(v1.begin()+1, v1.end()-1);
	for (int i = 0; i < 3; i++)
	{
		cout << v2[i] << " ";
	}

	return 0;
}

【C++】vector 基本使用(详解),C++,c++,开发语言,动态规划,迭代加深

迭代器进行初始化构造,就是选取一段范围进行拷贝;

三,vector iterator 的使用

1,begin + end

获取第一个数据位置的 iterator/const_iterator, 获取最后一个数据的下一个位置的iterator/const_iterator

2,rbegin + rend 

获取最后一个数据位置的 reverse_iterator,获取第一个数据前一个位置的 reverse_iterator

【C++】vector 基本使用(详解),C++,c++,开发语言,动态规划,迭代加深

诸位爱卿,我相信这张图对汝等足矣!

四,vector 空间增长问题

1,size

获取数据个数

#include<iostream>
#include<vector>
using namespace std;

int main()
{
	vector<int> v1(5, 6);
	cout << v1.size();

	return 0;
}

【C++】vector 基本使用(详解),C++,c++,开发语言,动态规划,迭代加深

获取有效数据个数,不等同于容量,只是数据个数;

2,capacity

获取容量大小

#include<iostream>
#include<vector>
using namespace std;

int main()
{
	vector<int> v1(5, 6);
	cout << v1.capacity();

	return 0;
}

【C++】vector 基本使用(详解),C++,c++,开发语言,动态规划,迭代加深

查看空间容量的,不等同于数据个数;

3,empty

判断是否为空,为空返回真,不为空返回 0;

#include<iostream>
#include<vector>
using namespace std;

int main()
{
	vector<int> v1(5, 6);
	vector<int> v2;
	cout << v1.empty()<<" "<<v2.empty();

	return 0;
}

【C++】vector 基本使用(详解),C++,c++,开发语言,动态规划,迭代加深

4,reserve

改变 vector 的 capacity

#include<iostream>
#include<vector>
using namespace std;

int main()
{
	vector<int> v1(5, 6);
	cout << v1.capacity() << endl;

	v1.reserve(50);
	cout << v1.capacity() << endl;

	v1.reserve(20);
	cout << v1.capacity() << endl;

	v1.reserve(3);
	cout << v1.capacity() << endl;

	return 0;
}

【C++】vector 基本使用(详解),C++,c++,开发语言,动态规划,迭代加深

兄弟们自己找找规律; 

5,resize

改变 vector 的 size

#include<iostream>
#include<vector>
using namespace std;

int main()
{
	vector<int> v1(5, 6);
	cout << v1.size() << " " << v1.capacity() << endl;

	v1.resize(20);
	cout << v1.size() << " " << v1.capacity() << endl;

	v1.resize(10);
	cout << v1.size() << " " << v1.capacity() << endl;

	return 0;
}

【C++】vector 基本使用(详解),C++,c++,开发语言,动态规划,迭代加深

size()的值与 capacity 的值息息相关的,当 size()大于 capacity 时,capacity 会增大扩容;

五,vector 增删查改

1,push_back

尾插

#include<iostream>
#include<vector>
using namespace std;

int main()
{
	vector<int> v1(5, 6);
	v1.push_back(7);
	v1.push_back(8);
	for (int i = 0; i < v1.size(); i++)
	{
		cout << v1[i]<<" ";
	}
	return 0;
}

【C++】vector 基本使用(详解),C++,c++,开发语言,动态规划,迭代加深

2,pop_back 

尾删

#include<iostream>
#include<vector>
using namespace std;

int main()
{
	vector<int> v1(5, 6);
	v1.pop_back();
	v1.pop_back();
	for (int i = 0; i < v1.size(); i++)
	{
		cout << v1[i]<<" ";
	}
	return 0;
}

【C++】vector 基本使用(详解),C++,c++,开发语言,动态规划,迭代加深

3,find

查找。(注意这个是算法模块实现,不是 vector 的成员接口)

【C++】vector 基本使用(详解),C++,c++,开发语言,动态规划,迭代加深

#include<iostream>
#include<vector>
using namespace std;

int main()
{
	vector<int> v1{ 1,2,3,4,5 };
	auto pos = find(v1.begin(),v1.end(), 3);
	cout << *pos << endl;

	pos = find(v1.begin(), v1.end(), 5);
	cout << *pos;
	return 0;
}

【C++】vector 基本使用(详解),C++,c++,开发语言,动态规划,迭代加深

在一个特点的范围里寻找一个数,然后返回指向这个数的迭代器;

4,insert

在 position 之前插入 val

【C++】vector 基本使用(详解),C++,c++,开发语言,动态规划,迭代加深

#include<iostream>
#include<vector>
using namespace std;

int main()
{
	vector<int> v1{ 1,2,3,4,5 };
	auto pos = find(v1.begin(),v1.end(), 3);
	cout << *pos << endl;
	v1.insert(pos, 66);
	for (int i = 0; i < v1.size(); i++)
	{
		cout << v1[i] << " ";
	}
	return 0;
}

【C++】vector 基本使用(详解),C++,c++,开发语言,动态规划,迭代加深

在指定位置前插入特定的数;

#include<iostream>
#include<vector>
using namespace std;

int main()
{
	vector<int> v1{ 1,2,3,4,5 };
	auto pos = find(v1.begin(),v1.end(), 3);
	cout << *pos << endl;

	v1.insert(pos, 3, 77);
	for (int i = 0; i < v1.size(); i++)
	{
		cout << v1[i] << " ";
	}
	cout << endl;

	return 0;
}

【C++】vector 基本使用(详解),C++,c++,开发语言,动态规划,迭代加深

在指定位置前插入指定数量的数;

#include<iostream>
#include<vector>
using namespace std;

int main()
{
	vector<int> v1{ 1,2,3,4,5 };
	auto pos = find(v1.begin(),v1.end(), 3);
	cout << *pos << endl;

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

	return 0;
}

【C++】vector 基本使用(详解),C++,c++,开发语言,动态规划,迭代加深

在指定位置前插入一段区间;

5,erase

删除 position 位置的数据

【C++】vector 基本使用(详解),C++,c++,开发语言,动态规划,迭代加深

#include<iostream>
#include<vector>
using namespace std;

int main()
{
	vector<int> v1{ 1,2,3,4,5 };
	auto pos = find(v1.begin(), v1.end(), 3);
	cout << *pos << endl;
	
	v1.erase(pos);
	for (int i = 0; i < v1.size(); i++)
	{
		cout << v1[i] << " ";
	}
	return 0;
}

【C++】vector 基本使用(详解),C++,c++,开发语言,动态规划,迭代加深

删除某个指定位置的数据;

#include<iostream>
#include<vector>
using namespace std;

int main()
{
	vector<int> v1{ 1,2,3,4,5 };

	v1.erase(v1.begin(),v1.end()-1);
	for (int i = 0; i < v1.size(); i++)
	{
		cout << v1[i] << " ";
	}
	return 0;
}

【C++】vector 基本使用(详解),C++,c++,开发语言,动态规划,迭代加深

删除指定一段区间的数据;

6,swap

交换两个 vector 的数据空间

【C++】vector 基本使用(详解),C++,c++,开发语言,动态规划,迭代加深

#include<iostream>
#include<vector>
using namespace std;

int main()
{
	vector<int> v1{ 0,1,2,3,4 };
	vector<int> v2{ 5,6,7,8,9 };

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

【C++】vector 基本使用(详解),C++,c++,开发语言,动态规划,迭代加深

直接交换两边的数据;

7,operator[]

像数组一样访问

【C++】vector 基本使用(详解),C++,c++,开发语言,动态规划,迭代加深

这个我们已经很熟悉了;

#include<iostream>
#include<vector>
using namespace std;

int main()
{
	vector<int> v1{ 0,1,2,3,4 };
	for (int i = 0; i < v1.size(); i++)
	{
		cout << v1[i] << " ";
	}
	return 0;
}

【C++】vector 基本使用(详解),C++,c++,开发语言,动态规划,迭代加深

【C++】vector 基本使用(详解),C++,c++,开发语言,动态规划,迭代加深文章来源地址https://www.toymoban.com/news/detail-768307.html

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

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

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

相关文章

  • C++算法之旅、06 基础篇 | 第四章 动态规划 详解

    状态表示 集合 满足一定条件的所有方案 属性 集合(所有方案)的某种属性(Max、Min、Count等) 状态计算(集合划分) 如何将当前集合划分成多个子集合 状态计算相当于集合的划分 :把当前集合划分成若干个子集,使得每个子集的状态可以先算出来,从而推导当前集合状态

    2024年02月09日
    浏览(35)
  • C++每日一练:打家劫室(详解动态规划法)

    这题目出得很有意思哈,打劫也是很有技术含量滴!不会点算法打劫这么粗暴的工作都干不好。 提示:以下是本篇文章正文内容,下面案例可供参考 题目名称: 打家劫舍 题目描述: 一个小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素

    2024年02月02日
    浏览(46)
  • 【C++】中的vector使用详解及重要部分底层实现

           本篇文章会对vector的语法使用进行详解。同时,还会对重要难点部分的底层实现进行讲解。其中有vector的 迭代器失效 和 深拷贝 问题。希望本篇文章的内容会对你有所帮助。 目录 一、vector 简单概述 1、1 C语言中数组的不便 1、2 C++中的动态数组容器vector  二、vector的

    2024年02月15日
    浏览(33)
  • C++中的vector使用详解及重要部分底层实现

           本篇文章会对vector的语法使用进行详解。同时,还会对重要难点部分的底层实现进行讲解。其中有vector的 迭代器失效 和 深拷贝 问题。希望本篇文章的内容会对你有所帮助。 目录 一、vector 简单概述 1、1 C语言中数组的不便 1、2 C++中的动态数组容器vector  二、vector的

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

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

    2024年02月11日
    浏览(47)
  • C++ vector基本操作

    目录 一、介绍 二、定义 三、迭代器 四、容量操作 1、size 2、capacity 3、empty 4、resize 5、reserve 总结(扩容机制) 五、增删查改 1、push_back pop_back 2、find 3、insert 4、erase 5、clear 6、swap 7、operator[] vector的文档介绍 vector是表示可变大小数组的序列容器。 就像数组一样,vector也采用

    2024年02月04日
    浏览(34)
  • 【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日
    浏览(44)
  • 【C++】STL---vector基本用法介绍

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

    2024年02月16日
    浏览(46)
  • 【C++】容器篇(一)—— vector 的基本概述以及模拟实现

    前言: 在之前,我们已经对 string类进行了基本的概述,并且手动的实现了string类中常用的接口函数。本期,我将带领大家学习的是STL库中的一个容器 -- vector 的学习。相比于之前的string类,本期的 vector 相对来说实现起来略微难一点,难点就在于要考虑关于 “ 迭代器失效 ”

    2024年02月07日
    浏览(44)
  • 探索C++中的动态数组:实现自己的Vector容器

    🎉个人名片 : 🐼作者简介:一名乐于分享在学习道路上收获的大二在校生 🙈个人主页🎉:GOTXX 🐼个人WeChat:ILXOXVJE 🐼本文由GOTXX原创,首发CSDN🎉🎉🎉 🐵系列专栏:零基础学习C语言----- 数据结构的学习之路----C++的学习之路 🐓每日一句:如果没有特别幸运,那就请特

    2024年03月16日
    浏览(45)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包