vector容器会了吗?一文搞定它

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

赋值操作

#include<iostream>
#include <vector>
using namespace std;
void print(vector<int>& v)
{
	for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
	{
		cout << *it << " ";
	 }
	cout << endl;
}

它是动态扩展,找一块新的更大的空间,把原来的数据拷贝到这,释放原来的空间

//1.赋值操作
/*

  • 函数模型:
  • vector& operator=(const vector& dep)
  • 重载=运算符
  • assign(beg,end);
  • 将beg,end之间的数据拷贝给自身
  • assign(n,elem);
  • 将n个elem拷贝赋值给本身
    /
    /
void test01()
{
	vector<int>v;
	vector<int>v1;
	vector<int>v2;
	for (int i = 0; i < 10; i++)
	{
		v.push_back(i);
	}
	print(v);
	v1 = v;
	//直接赋值法
	print(v1);

	v2.assign(v.begin(), v.end());
	//assign 赋值
	print(v2);

	//n个元素方式赋值
	vector<int>v3;
	v3.assign(10, 100);//打印10个100
		print(v3);
}

容量和大小

//2.容量和大小

/*

  • 函数原型:
    empty()
    判断容器是否为空
    capacity()
    容器的容量
    size()
    返回容器中元素的个数
    resize(int num)
    重新指定容器的长度为num,
    如果容器变长则以默认值填充新位置
    如果容器变短,则末尾超过容器长度的元素删除
    resize(int num,elem)
    重新指定容器的长度为num,
    如果容器变长则以elem值填充新位置
    如果容器变短,则末尾超过容器长度的元素删除
    /
    /
void test02()
{
	vector<int>v1;
	for (int i = 0; i < 10; i++)
	{
		v1.push_back(i);
	}
	print(v1);
	if (!v1.empty() )
		cout << "buweikong" << endl;
	cout << "v1的容量大小:" << v1.capacity() << endl;
	cout << "v1的大小:" << v1.size() << endl;
	
	v1.resize(12,20);
	print(v1);
}

插入和删除操作

//3.插入和删除操作
/*

  • 函数原型
    push_back(elem);
    尾部插入元素elem
    pop_back();
    删除最后一个元素
    insert(const_iterator pos,elem);
    迭代器指向位置pos插入元素elem
    insert(const_iterator pos,int cout,elem);
    迭代器指向位置pos插入cout个元素elem
    erase(const_iterator pos);删除迭代器指向的元素
    erase(const_iterator start,const_iterator end);
    删除迭代器从start到end之间的元素
    clear();
    删除容器中所有元素
    */

数据存取

//4.数据存取
/*
函数原型:
at(int idx);
返回索引idx所指的数据
operator[]
返回索引idx所指的数据
front();
返回容器中第一个数据元素
back();
返回容器中最后一个数据元素
/
/

void test04()
{
	vector<int>v4;
	for (int i = 0; i < 1000; i++)
	{
		v4.push_back(i);
		//利用at访问元素	
		//cout << v4.at(i) << endl;
		//cout << v4[i] << endl;
	}
	int n=v4.back();
	//print(v4);
	cout <<"最后一个元素:" << n << endl;
	n = v4.front();
	cout <<"第一个元素:" << n << endl;

互换容器

//函数模型:swap(vex)
vector<int>v5;
	v5.swap(v4);
	

	//print(v5);
	//print(v4);//因为v5是空,所以交换之后不进入for循环,打印一个换行
	//巧用swap()可以收缩内存空间
	cout << "v4的容量是:" << v4.capacity() << endl;
	cout << "v5的容量是:" << v5.capacity() << endl;
	cout << "v5的大小是:" << v5.size() << endl;
	v5.resize(3);//改变了大小,但是容量没有改变,所以浪费了
	cout << "v5的容量是:" << v5.capacity() << endl;
	cout << "v5的大小是:" << v5.size() << endl;

	//巧用swap收缩
	vector<int>(v5).swap(v5);
	cout << "v5的容量是:" << v5.capacity() << endl;
	cout << "v5的大小是:" << v5.size() << endl;
	//vector<int>(v5)匿名对象 利用拷贝函数构造新的对象
	//swap(v5);      容器的交换,相当于指针进行交换,交换完之后,匿名对象会自动销毁(销毁原来的1000)

}

vector预留空间

void test06()
{
	vector<int>v;
	//预留空间
	v.reserve(100000);
	int num = 0;
	int* p = NULL;
	for (int i = 0; i < 100000; i++)
	{
		v.push_back(i); 
		if (p != &v[0])
		{
			p = &v[0];
			num++;
		}
}
	cout << "重新开辟次数:" << num << endl;
}


int main()
{
	//test01();
	//test02();
	//test04();
	test06();
	system("pause");
	return 0;
}

此外如果大家有购书需求,欢迎大家考虑一下清华社,直接以最低的价格买到最好的书!

详情链接添加链接描述

vector容器会了吗?一文搞定它

618,清华社 IT BOOK 多得图书活动开始啦!活动时间为 2023 年 6 月 7 日至 6 月 18 日,
清华社为您精选多款高分好书,涵盖了 C++、Java、Python、前端、后端、数据库、算法与机器学习等多个 IT 开发领域,适合不同层次的读者。全场 5 折,扫码领券更有优惠哦!
快来京东点击链接 IT BOOK 多得(或扫描京东二维码)查看详情吧!文章来源地址https://www.toymoban.com/news/detail-477239.html

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

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

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

相关文章

  • 软件测试|使用Python读写yaml文件,你会了吗?

    简介 YAML(YAML Ain\\\'t Markup Language)是一种可读的数据序列化格式,它常用于配置文件和数据交换。Python 提供了许多库来处理 YAML 文件。在本文中,我们将探讨如何使用 PyYAML 库来读取和写入 YAML 文件,以及提供一些示例来说明其用法。 环境准备 在读写yaml文件之前,我们需要先

    2024年01月16日
    浏览(65)
  • 软件测试|如何实现字典的键值互换,你会了吗?

    简介 在Python中,字典是一种非常有用的数据结构,它将数据存储为键值对,并且键必须是唯一的。有时候,我们可能需要将字典的键和值互换,以便查找或操作数据更加方便。本文将详细介绍如何在Python中实现字典键值的互换操作。 字典的基本概念 首先,让我们快速回顾一

    2024年01月21日
    浏览(64)
  • 用上这个8个AI写作神器,立马告别写作烦恼困扰,你都会了吗? #AI写作#学习

    我们做自媒体运营,想要快速的创作内容,提供文章的创作速度是我们的目标,我们别的大佬可以很快地就创作出一篇内容,而自己墨迹半天确出不了一个字呢?其实这关乎到创作技巧,下面小编就跟大家分享如何利用自媒体工具辅助自己创作的技巧。 1.七燕写作 这是一个微

    2024年04月16日
    浏览(50)
  • list和vector容器的插入与访问操作区别

    std::list 和 std::vector 是C++中的两种常见数据结构,它们在不同的使用场景下各有优势。 std::vector 的内部实现是动态数组,它在连续的内存块中存储数据。这使得 std::vector 在 访问元素时具有非常高的效率,因为可以直接通过索引来访问元素,时间复杂度为O(1) 。然而, std::ve

    2024年02月13日
    浏览(44)
  • 【C++】vector类的模拟实现(增删查改,拷贝构造,赋值运算,深浅拷贝)

    🌏博客主页: 主页 🔖系列专栏: C++ ❤️感谢大家点赞👍收藏⭐评论✍️ 😍期待与大家一起进步! 我们模拟vector是用迭代器(start,end,endofstorage)来控制增删查改操作的 1普通构造 2迭代器构造 3初始化字符构造 4拷贝构造: 1当前大小(size()) 2总体容量(capacity()) 1begin()

    2024年02月15日
    浏览(61)
  • AI绘画怎么操作?看完这篇你就会了

    人工智能的快速发展正在为各个领域带来革命性的变化,而艺术创作也不例外。一键AI绘画软件的出现,使得艺术家们能够借助智能助手的力量,以更加创新的方式进行艺术创作。这种软件不仅简化了创作过程,还为艺术家们提供了新的灵感和创意。那你们知道免费一键AI绘画

    2024年02月13日
    浏览(46)
  • 一文搞定网络层协议

    前言 一、什么是网络层? 二、IP协议 2.1,什么是ip协议? 总结: 2.2,ip版本 2.3,IPv4的报文格式 三,数据包分片 四,MTU(最大传输单元) 五,生存时间(Time to live)TTL 六,验证两台路由器之间如何配置可以产生三层环路 配置设备: 6.1将设备设置为永不超时 6.2设置ip地址

    2024年02月15日
    浏览(35)
  • 高等数学——一文搞定二重积分

    定义 :设函数 z = f ( x , y ) z=f(x,y) z = f ( x , y ) 在有界区域 D D D 上有定义,将区域 D D D 任意分成 n n n 个小区域 Δ σ 1 , Δ σ 2 , . . . , Δ σ n Deltasigma_1,Deltasigma_2,...,Deltasigma_n Δ σ 1 ​ , Δ σ 2 ​ , ... , Δ σ n ​ 其中 Δ σ i Deltasigma_i Δ σ i ​ 代表第 i i i 个小区域,也表示它

    2024年04月15日
    浏览(36)
  • Scrapy和Selenium整合(一文搞定)

    scrapy和selenium的整合使用 先定个小目标实现万物皆可爬!我们是用scrapy框架来快速爬取页面上的数据,它是自带并发的,速度是可以的。但是一些ajax异步的请求我们不能这么爬取。我们要视同selenium来进行lazy loading,也就是懒加载,渲染到页面加载数据。 首先你要安装以下包

    2024年02月04日
    浏览(43)
  • 动态规划系列 | 一文搞定区间DP

    区间 DP 可以用于解决一些涉及到区间合并或分割的问题。区间 DP 通常有以下三个特点: 合并(分割) :将两个或多个部分进行整合,或者反过来将一个区间分解成多个部分。 特征 :能将问题分解为能两两合并的形式。 求解 :对整个问题设最优解,枚举合并点,将问题分

    2024年02月02日
    浏览(47)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包