C++,STL,,vector容器

news2025/7/27 4:13:11

文章目录

  • 一、vector介绍
    • 1.vector对象构造
    • 2.vector的赋值
    • 3.vector的大小
    • 4.vector末尾的添加移除操作
    • 5.vector的数据存取
    • 6.vector的插入
    • 7.vector的删除
    • 8.vector迭代器

一、vector介绍

vector相当于顺序表
vector是将元素置于一个动态数组中加以管理的容器。
vector可以随机存取元素,支持索引值直接存取, 用[]操作符或at()方法对元素进行操作
在这里插入图片描述
vector尾部添加或移除元素非常快速。但是在中部或头部插入元素或移除元素比较费时,这是因为在中部或者头部插入数据,所以数据都会移动,会大量拷贝
在这里插入图片描述

1.vector对象构造

vector采用模板类实现,vector对象的默认构造形式
vector vecT;

//默认构造函数
vector v1; //一个存放int的vector容器
vector v2; //一个存放float的vector容器
vector v2; //一个存放student的vector容器

//带参构造函数
vector(beg,end); //构造函数将[beg, end)区间中的元素拷贝给本身。注意该区间是左闭右开的区间
vector(n,elem); //构造函数将n个elem拷贝给本身
vector(const vector &v1); //拷贝构造函数

// demo 15-23
#include <iostream>
using namespace std;

#include <vector>
#include <algorithm>

void demo1(){
	//vector 对象的默认构造
   //默认构造函数 元素个数为0, 所占内存空间为0
	/*vector<int> v1;
	//vector<float> v2;
	
	cout<<"v1 的元素个数: "<<v1.size()<<endl;
	cout<<"v1 容器的大小:"<<v1.capacity()<<endl;

	//当我们使用vector 的默认构造函数时,切记,不能直接通过下标去访问
	//v1[0]=1;

	v1.push_back(1);
	cout<<"尾部插入1个元素后:"<<endl;
	cout<<"v1 的元素个数:"<<v1.size()<<endl;
	cout<<"v1 容器的大小:"<<v1.capacity()<<endl;

	v1.push_back(2);
	v1.push_back(3);
	v1.push_back(4);
	v1.push_back(5);

	cout<<"尾部插入5个元素后:"<<endl;
	cout<<"v1 的元素个数:"<<v1.size()<<endl;
	cout<<"v1 容器的大小:"<<v1.capacity()<<endl;
	*/


	//vector 带参构造函数
	//vector<int> v2(10);  //构造时就分配空间,同时插入10个元素,元素大小为0
	vector<int> v2(10, 666);
	//vector<int> v3(v2);
	//vector<int> v3(v2.begin()+3, v2.end());
	int test[]={1, 2, 3, 4, 5};
	vector<int> v3(test, test+2);


	cout<<"v2 的元素个数:"<<v2.size()<<endl;
	cout<<"v2 容器的大小:"<<v2.capacity()<<endl;


	cout<<"v2调用 assign 后:"<<endl;
	cout<<"v2 的元素个数:"<<v2.size()<<endl;
	cout<<"v2 中存储的元素是: "<<endl;
	for(int i=0; i<v2.size(); i++){
		cout<<v2[i]<<endl;
	}

	cout<<"v3 中存储的元素是: "<<endl;
	for(int i=0; i<v3.size(); i++){
		cout<<v3[i]<<endl;
	}
}

void main(){

	demo1();

	system("pause");
	return ;
}

2.vector的赋值

vector 的赋值
v2.assign(2, 888);//第一种玩法 改变原来vector 中的元素个数和值
v2.assign(v3.begin(), v3.end());//第二种玩法,使用迭代器重新赋值

int test1[]={1, 2, 3, 4, 5};
v2.assign(test1, test1+3);//第三种玩法,使用指针赋值
v2 = v3;//第四种玩法,赋值运算

3.vector的大小

vector.size(); //返回容器中元素的个数
vector.empty(); //判断容器是否为空
vector.resize(num); //重新指定容器的长度为num,若容器变长,则以默认值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。
vector.resize(num, elem); //重新指定容器的长度为num,若容器变长,则以elem值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除

4.vector末尾的添加移除操作

v2.push_back(1); //在容器尾部加入一个元素
v2.pop_back(); //移除容器中最后一个元素

5.vector的数据存取

第一 使用下标操作 v2[0] = 100;
第二 使用at 方法 如: v2.at(2) = 100;
第三 接口返回的引用 v2.front() 和 v2.back()
注意: 第一和第二种方式必须注意越界

6.vector的插入

vector.insert(pos,elem); //在pos位置插入一个elem元素的拷贝,返回新数据的位置。
vector.insert(pos,n,elem); //在pos位置插入n个elem数据,无返回值。
vector.insert(pos,beg,end); //在pos位置插入[beg,end)区间的数据,无返回值

7.vector的删除

  1. 把整个vector 都干掉
    v2.clear();
    cout<<“调用 v2.clear() 后”<<endl;

2.干掉单个元素
v2[1] = 888;
v2.erase(v2.begin()+1);

  1. 干掉多个元素
    v2.erase(v2.begin(), v2.begin()+3);

8.vector迭代器

#include <iostream> 
#include <Windows.h>
#include <vector>
#include <algorithm>

using namespace std;
int main(void) {
	//vector<const char*> v1;
	vector<int> v2;

	v2.push_back(1);
	v2.push_back(2);
	v2.push_back(3);
	v2.push_back(4);
	v2.push_back(5);

	vector<int>::iterator iter = v2.begin();
	for (; iter != v2.end(); iter++) {
		cout << *iter << endl;
	}
	cout << "反向迭代器" << endl;

	vector<int>::reverse_iterator reve = v2.rbegin();
	for (; reve != v2.rend(); reve++) {
		cout << *reve << endl;
	}

	//cout << "反向迭代器" << endl;
	//vector<int>::iterator itera = v2.end();
	//for (; itera != v2.begin(); itera--) {
	//	cout << *itera << endl;
	//}
	/*cout << "\n--------------自己写迭代器反向遍历--------------------\n";
	vector<int>::iterator iter1;
	iter1 = v2.end()-2;*/
	/*while (iter1 != v2.begin()-1) {
		cout << *iter1 << " ";
		iter1--;
	}*/

	/*
	* vector<int> v3(v2.begin(),v2.end());
	//int test[]{1,2,3,4,5};
	//vector<int> v4(test,test+3);




	cout << "V2容器中的值" << endl;
	for (int i = 0; i < v2.size();i++) {
		cout << v2.at(i) << endl;
	}

	cout << "-----------end----------" << endl;

	cout << "V3容器中的值" << endl;
	for (int i = 0; i < v3.size(); i++) {
		cout << v3.at(i) << endl;
	}

	cout << "-----------end----------" << endl;
	for (int i = v2.front()-1; i < v2.back(); i++) {
		cout << v2.at(i) << endl;
	}

	int i = v2.front();
	cout << i << endl;

	* int a = v2.front();
	int b = v2.back();
	cout << a+1 <<"   " << b-1 << endl;

	* cout << "-----------end----------" << endl;
	cout << "V2容器的大小:" << v2.capacity() << endl;
	cout << "V2的元素个数:" << v2.size() << endl;
	cout << "V2容器中的值" << endl;
	for (int i = 0; i < v2.size(); i++) {
		cout << v2.at(i) << endl;
	}

	v2.resize(15,666);
	v2.push_back(1024);
	v2.pop_back();
	cout << "-----------end----------" << endl;
	cout << "V2容器的大小:" << v2.capacity() << endl;
	cout << "V2的元素个数:" << v2.size() << endl;
	cout << "V2容器中的值" << endl;
	for (int i = 0; i < v2.size(); i++) {
		cout << v2.at(i) << endl;
	}
	 v1 = v3;
	 v3.assign(2,1024);
	v1.push_back(100);
	cout << "V1容器的大小:" << v1.capacity() << endl;
	cout << "V1的元素个数:" << v1.size() << endl;
	cout << "V1容器中的值" << endl;
	for (int i = 0; i < v1.size(); i++) {
		cout << v1.at(i) << endl;
	}

	v1.push_back(100);
	v1.push_back(100);
	v1.push_back(100);
	v1.push_back(100);
	v1.push_back(100);
	cout << "-----------end----------" << endl;
	cout << "V1容器的大小:" << v1.capacity() << endl;
	cout << "V1的元素个数:" << v1.size() << endl;
	cout << "V1容器中的值" << endl;
	for (int i = 0; i < v1.size(); i++) {
		cout << v1.at(i) << endl;
	}

	cout << "-----------end----------" << endl;
	cout << "V2容器的大小:" << v2.capacity() << endl;
	cout << "V2的元素个数:" << v2.size() << endl;
	cout << "V2容器中的值" << endl;
	for (int i = 0; i < v2.size(); i++) {
		cout << v2.at(i) << endl;
	}

	v2.push_back(666);
	cout << "-----------end----------" << endl;
	cout << "V2容器的大小:" << v2.capacity() << endl;
	cout << "V2的元素个数:" << v2.size() << endl;
	cout << "V2容器中的值" << endl;
	for (int i = 0; i < v2.size(); i++) {
		cout << v2.at(i) << endl;
	}
	*/
	system("pause");
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/16740.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

天元宠物上市首日破发:市值蒸发约5亿元,薛元潮兄妹为实控人

11月18日&#xff0c;杭州天元宠物用品股份有限公司&#xff08;下称“天元宠物”&#xff0c;SZ:301335&#xff09;在深圳证券交易所创业板上市。本次上市&#xff0c;天元宠物的发行价格为49.98元/股&#xff0c;发行数量为2250万股&#xff0c;募资总额约为11.25亿元&#…

华玉通软发布“云雀”执行管理中间件,为智能驾驶关键应用提供确定性执行保障

11月17日&#xff0c;华玉通软&#xff08;下称“华玉”&#xff09;宣布正式发布“云雀”执行管理中间件&#xff08;LARK EM Execution Management&#xff09;。 这是继“雨燕”通信中间件&#xff08;SWIFT DDS&#xff09;后&#xff0c;华玉的又一款完全自主研发的智能驾…

[iOS]分析Mach-O文件

一、Mach-O文件介绍 我们拿到IPA文件后&#xff0c;解压后就能拿到一个与APP同名的可执行文件。 Mach-O为Mach Object文件格式的缩写&#xff0c;它是一种用于可执行文件&#xff0c;目标代码&#xff0c;动态库&#xff0c;内核转储的文件格式。 每个Mach-O文件包括一个Mach-…

Design A NearBy Friends

title: Notes of System Design No.09 — Design a Uber backend description: Design a PasteBin ’ date: 2022-05-13 18:01:58 tags: 系统设计 categories: 系统设计 00. What is Newarby Friends? 01.Functional Requirement 02. Non-Functional Requirement 03. Assump…

Java新特性(2):Java 10以后

您好&#xff0c;我是湘王&#xff0c;这是我的CSDN博客&#xff0c;欢迎您来&#xff0c;欢迎您再来&#xff5e; 虽然到目前为止Java的版本更新还没有什么惊天动地的改变&#xff0c;但总是会冒出一些有趣的小玩意。前面列举了Java9和Java10的一些特色&#xff0c;现在接着来…

shell修改永久性别名,压缩与解压缩(zip gzip bzip2)文件上传预下载(sftp)

命令别名&#xff08;永久有效&#xff09; 敲重点&#xff08;写入文件&#xff09;&#xff08;1&#xff09;仅对root有效&#xff0c;写一个命令命为hello,实现的功能为每输入一次hello命令&#xff0c;就有hello&#xff0c;everyone写入文件/file.txt中。 root用户…

[UE][C++]Assimp库安装编译,UE_Assimp插件安装使用,各种三维格式转换

[UE][C]Assimp库安装编译&#xff0c;UE_Assimp插件安装使用&#xff0c;各种三维格式转换写在前面1.作者碎碎念2.结果1.需要准备的软件2.Assimp库编译步骤3.UE_Assimp插件的安装4.UE_Assimp插件样例使用5.Assimp库各种三维格式转换小程序写在前面 1.作者碎碎念 &#xff08;…

ElasticSearch 拼音插件elasticsearch-analysis-pinyin + IK 分词器

ElasticSearch kibana 部署略 创建索引 PUT /nba_20220101 {"mappings": {"properties": {"age": {"type": "integer"},"birthDay": {"type": "date"},"birthDayStr": {"t…

软件方面的文档标准GB/T

在文档标准方面&#xff0c;主要有《软件文档管理指南》&#xff08;GB/T 16680-1996&#xff09;、《计算机软件产品开发文件编制指南》&#xff08;GB/T 8567-2006&#xff09;和《计算机软件需求说明编制指南》&#xff08;GB/T 9385-2008&#xff09;等三个标准。 1. GB/T…

C语言源代码系列-管理系统之学生信息管理系统

往期文章分享点击跳转>《导航贴》- Unity手册&#xff0c;系统实战学习点击跳转>《导航贴》- Android手册&#xff0c;重温移动开发 &#x1f449;关于作者 众所周知&#xff0c;人生是一个漫长的流程&#xff0c;不断克服困难&#xff0c;不断反思前进的过程。在这个过…

竞赛开源项目汇总

1、Kaggle Titanic 一个Kaggle竞赛的案例&#xff0c;演示基本的数据转换、分析和可视化技术 https://github.com/agconti/kaggle-titanic 2、Humpback Whale Identification 1st https://github.com/earhian/Humpback-Whale-Identification-1st- 3、Data Science Competi…

【附源码】计算机毕业设计JAVA砂石矿山管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis Maven Vue 等等组成&#xff0c;B/…

无代码开发工具突破数据“孤岛“,让数据“动”起来

在信息化的发展过程中&#xff0c;每个独立运作的企业和机构都会使用2-3种以上的软件&#xff0c;而在某些比较成熟的公司&#xff0c;其软件产品的数量就更加惊人了&#xff0c;一个中等规模的公司可以拥有数百套软件系统来支持公司的正常运转。 许多公司的CIO或CTO&#xff0…

智能漏电断路器主要有哪些功能?

安科瑞 华楠 ASCB1 系列智能微型断路器是安科瑞电气股份有限公司 全新推出的智慧用电产品&#xff0c;产品由智能微型断路器与智 能网关两部分组成&#xff0c;可用于对用电线路的关键电气因 素&#xff0c;如电压、电流、功率、温度、漏电、能耗等进行实 时监测&#xff0c;具…

DOX-TF/Ce6/IgG 转铁蛋白/光敏剂/单抗IgG修饰阿霉素/阿霉素白蛋白纳米粒的制备

今天要分享的科研知识是DOX-TF/Ce6/IgG 转铁蛋白/光敏剂/单抗IgG修饰阿霉素/阿霉素白蛋白纳米粒&#xff0c;下面和小编一起来看&#xff01; DOX-IgG 单抗IgG偶联阿霉素的制备&#xff1a; 设计了一种叶酸-聚乙二醇-免疫球蛋白G-阿霉素(FA-PEG-IgG-DOX)的四元靶向给药系统.其…

石子合并系列问题

石子合并 石子合并问题在网上有三个版本&#xff1a; AcWing 282. 石子合并 设有 N 堆石子排成一排&#xff0c;其编号为 1&#xff0c;2&#xff0c;3&#xff0c;…&#xff0c;N。 每堆石子有一定的质量&#xff0c;可以用一个整数来描述&#xff0c;现在要将这 N 堆石子合…

Android 编译C++

Android 编译C项目前言正文一、基本知识① 要做什么&#xff1f;② JNI是什么&#xff1f;③ NDK是什么&#xff1f;二、配置NDK三、创建新工程① 工程目录说明② 分析cpp文件③ JNI数据类型四、现有工程使用C① 创建C文件② 创建CMake③ 使用C五、源码前言 在开发过程中&#…

集采报告丨国家药品带量采购政策及趋势分析

本人在医药领域从事药品数据分析工作多年&#xff0c;前几天在了解VBP药品带量采购相关事项时遇见了一些网上不好查找答案的问题&#xff08;国家药品带量采购目录、流程、区别、数据分析、政策、执行、结果、公示、网站、意思&#xff09;&#xff0c;对此笔者将其整理出来并解…

追求极致性能,RocketMQ 消息通信详解

1 介绍 RocketMQ 消息队列架构主要包括 NameServe、Broker(Master/Slave)、Producer、Consumer 4 个核心部件&#xff0c;基本执行流程如下&#xff1a; 点击查看大图 NameServer 优先启动。NameServer 是整个 RocketMQ 的“中央大脑” &#xff0c;作为 RocketMQ 的服务注册中…

计算机网络(下)

运输层 运输层概述 概念 进程之间的通信 从通信和信息处理的角度看&#xff0c;运输层向它上面的应用层提供通信服务&#xff0c;它属于面向通信部分的最高层&#xff0c;同时也是用户功能中的最低层。当网络的边缘部分中的两个主机使用网络的核心部分的功能进行端到端的通…