C++语法知识点-vector+子数组

news2024/9/24 5:24:58

C++语法知识点-vector+子数组

  • 一维数组定义
      • 无参数
      • 有参数
      • 迭代器
      • 扩容操作reserve
  • 二维数组 vector 定义
    • 创建m*n的二维vector
    • vector< vector<int> > v(m, vector<int>(n) )
  • 初始化定义
  • vector常用函数的实例分析
    • 访问操作
    • resize 函数
    • push _back ( )
    • pop_back()函数
    • size():
    • insert()
      • insert(pos,first,last)
    • assign
    • sort
    • front
    • back
  • 子数组相关问题
    • typeid
    • auto
      • 使用auto自动识别变量类型
      • 遍历数组

一维数组定义

Vector是一个封装了动态大小数组的顺序容器(Sequence
Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。

无参数

在这里插入图片描述

有参数

#include<iostream>
#include<vector>
using namespace std;
class p
{
public:
	p(int a=2,int b=3)
	{
		_a = a;
		_b = b;
	}
	void print()
	{
		printf("%d ", _a);
		printf("%d ", _b);
		
	}
private:
	int _a;
	int _b;
	

};
void test2()
{
	p d1(55,66);
	vector<p> v1(2);
	vector<p> v2(2, d1);
	cout << "接下来开始打印v1的内容:" << endl;
	for (auto v : v1)
	{
		v.print();
	}
	cout << "接下来开始打印v2的内容:" << endl;
	for (auto v : v2)
	{
		v.print();
	}
}
int main()
{
	test2();
	system("pause");
	return 0;
}

在这里插入图片描述

迭代器

//迭代器进行初始化创建出来的对象        
vector<Date>::iterator it1 = v.begin() + 1;        
vector<Date>v1(it1, v.end() - 1);        
//访问v1数组就是访问v数组        
  • 并且可以通过 *it 来访问vector里的元素
#include<iostream>
#include<vector>
using namespace std;
int main() {
    vector<int> v;
    v.push_back(1);	//依次输入1、 2、 3 
    v.push_back(2);
    v.push_back(3);
    for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
        cout << *it << " ";
    }

    return 0;
}

扩容操作reserve

动态数组的容量是不断的根据输入的数据的大小变化的,但是增加了reserve函数可以提前就进行扩展数组的容量

void test5()
{
	vector<p> v1(5);
	cout << v1.size() << endl;
	cout << v1.capacity() << endl;
	v1.reserve(100);
	v1.push_back(p(11, 22));

	cout << v1.size() << endl;
	cout << v1.capacity() << endl;
}
  • capacity()//求出数组容量的函数

-

二维数组 vector 定义

二维vector数组vector Arrayname[size]; Arrayname[]中的每一个元素都是一个vector。我们可以把二维vector数组当做两个维都可以变长的二维数组来理解。

创建m*n的二维vector

  • 定义二维数组时候需要注意的事项
    vector<vector> A;//错误的定义方式
    vector<vector > A;//正确的定义方式

vector<vector >nums(m, vector(n)); //m*n的二维vector

定义了一个vector容器,元素类型为vector,初始化为包含m个vector对象,每个对象都是一个新创立的vector对象的拷贝,而这个新创立的vector对象被初始化为包含n个0。

vector< vector > v(m, vector(n) )

定义了一个vector容器,元素类型为vector,初始化为包含m个vector对象,每个对象都是一个新创立的vector对象的拷贝,而这个新创立的vector对象被初始化为包含n个0

初始化定义

初始化:
vector a(5); //初始化5个值为0的元素
vector a(5, 1);//定义了5个整型元素的向量,且给出每个元素的初值为1
int b[7] = { 1,2,3,4,5,9,8 }; vector a(b, b + 7); //从数组中获得初值

vector a(b.begin(), b.begin + 3); //定义了a值为b中第0个到第2个(共3个)元素

vector v{ 1,2,3,4,5 }; //使用花括号赋值

vector常用函数的实例分析

访问操作

  • 普通数组访问
    定义为vector v 的vector容器,可以使用 v[0]、v[1]、v[2]…这种方式来访问。当然,下标不能越界(v.size() - 1之内)。
    注:v[0]、v[1]、v[2]等价于* (v.begin())、* (v.begin() + 1)、* (v.begin() + 2)。
  • 迭代器访问
	for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
		cout << *it << " ";
	}

resize 函数

是一个替换字符串长度的函数,有两个重载函数,第一个参数都是替换之后的大小,第二个为替换的字母

在这里插入图片描述

在这里插入图片描述

  • 之后字符串未改变是因为resize(n)中的n 比原来的长度大,空字符为‘\0’
  • a.resize(12, ‘a’) 将新扩展的空间填充为字符‘a

push _back ( )

vector对象里面这个函数的作用就是往数组后面插入数据
在这里插入图片描述

pop_back()函数

//pop_back()表示删除vector尾部的元素

在这里插入图片描述

size():

size()用来获得vector中元素的个数

insert()

insert(it, x)用来向vector的任意迭代器it处插入一个元素x

在这里插入图片描述

insert(pos,first,last)

  • insert(pos,first,last) 在 pos 位置之前,插入其他容器(不仅限于vector)中位于 [first,last) 区域的所有元素(简单说就是把两个容器拼接在一起)。
#include<iostream>
#include<vector>
using namespace std;

int main() {
	vector<int> v, v1, v2;
	for (int i = 1; i <= 5; i++) v.push_back(i);
	for (int i = 10; i <= 13; i++) v1.push_back(i);
	//for (int i = 20; i <= 23; i++) v2.push_back(i);
	v.insert(v.end(), v1.begin(), v1.end());  

	//v.insert(v.end(), v2.begin(), v2.end());
	for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
		cout << *it << " ";
	}



	return 0;
}

在这里插入图片描述

assign

这个函数的作用就是将对象原来的内容全部清空,将你给的内容填入到该对象的空间里面去

用迭代器进行访问

	for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
		cout << *it << " ";
	}
  • 下面是各种不同情况赋值操作
#include<iostream>
#include<vector>
using namespace std;
int main()
{
	vector<int>  v = { 1,2,3,4,5,6,7,8,9,10 };


	//v.assign(10, 0);

	/*vector<int> p;
	p.assign(v.begin(), v.end());*/
	
	/*v.assign({ 666,667,668 });
	for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
		cout << *it << " ";
	}*/




	return 0;

}

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

sort

排序

sort(v.begin(),v.end());

front

返回vector中的第一个元素

back

返回vector中的最后一个元素

子数组相关问题

typeid

获知变量类型名称,可以使用 typeid(变量).name()

#include<iostream>
#include<vector>
using namespace std;
int main()
{

	//int a = 3;
	//if (typeid(a) == typeid(int))
	//{
	//	cout << "int" << endl;
	//}
	//return 0;
	int a = 1;
	double b = 3.14;
	cout << typeid(a).name() << endl;
	cout << typeid(b).name() << endl;
	return 0;

}

在这里插入图片描述

auto

使用auto自动识别变量类型

#include<iostream>
#include<vector>  
using namespace std;  
int main()  
{

	auto a = 2;  
	auto b = 3.14;  
	auto c = "r";  
	cout << typeid(a).name() << endl;  
	cout << typeid(b).name() << endl;  
	cout << typeid(c).name() << endl;  

	return 0;  

}

遍历数组

#include<iostream>
#include<vector>
using namespace std;
int main()
{

	//普通的遍历数组操作
	int a[] = { 1,2,3,4,5,6,7 };
	//for (int i = 0; i < sizeof(a) / sizeof(a[0]); i++)
	//{
	//	cout << a[i] << " ";
	//}
	//cout << endl;

	//使用auto关键字进行操作
	for (auto i : a)
	{
		cout << i << " ";
	}
	cout << endl;



	return 0;

}

在这里插入图片描述

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

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

相关文章

宣传技能培训1——《新闻摄影技巧》光影魔法:理解不同光线、角度、构图的摄影效果,以及相机实战操作 + 新闻摄影实例讲解

新闻摄影技巧 写在最前面摘要 构图与拍摄角度景别人物表情与叙事远景与特写 构图与拍摄角度案例 主体、陪体、前景、背景强调主体利用前景和背景层次感的创造 探索新闻摄影中的构图技巧基本构图技巧构图技巧的应用实例实例分析1. 黄金分割和九宫格2. 三角型构图3. 引导线构图4.…

2 使用React构造前端应用

文章目录 简单了解React和Node搭建开发环境React框架JavaScript客户端ChallengeComponent组件的主要结构渲染与应用程序集成 第一次运行前端调试将CORS配置添加到Spring Boot应用使用应用程序部署React应用程序小结 前端代码可从这里下载&#xff1a; 前端示例 后端使用这里介…

unity shaderGraph实例-可交互瀑布

不要问我水在哪里&#xff0c;你自己相像这是一个瀑布&#xff0c;瀑布的效果我还不会做 效果展示 整体结构 这里片元着色器最后输出的baseColor应该是黑色&#xff0c;白色为错误。 各区域内容 区域1 计算球到瀑布的距离&#xff0c;然后减去一个值&#xff0c;实现黑色区域…

【小黑送书—第九期】>>重磅!这本30w人都在看的Python数据分析畅销书:更新了!

想学习python进行数据分析&#xff0c;这本《利用python进行数据分析》是绕不开的一本书。目前该书根据Python3.10已经更新到第三版。 Python 语言极具吸引力。自从 1991 年诞生以来&#xff0c;Python 如今已经成为最受欢迎的解释型编程语言。 pandas 诞生于2008年。它是由韦…

【亚太杯前两问论文】2023年第十三届APMCM亚太地区大学生数学建模竞赛——(文末领取方式)

2023年第十三届APMCM亚太地区大学生数学建模竞赛——论文无偿分享&#xff01;&#xff01;&#xff01; C题前两问论文代码已出&#xff0c;其他赛题及后续论文代码会持续更新。 祝各位小伙伴都能在比赛中发挥出色&#xff0c;取得心仪的成绩呦&#xff01;一起加油&#xff…

使用Arrays.Sort并定制Comparator排序解决合并区间

合并区间-力扣算法题56题 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间 。 示例 1&#xff1a; 输入&am…

姿态传感器——MPU6050

1、MPU6050介绍 MPU6050是由三个陀螺仪和三个加速度传感器组成的6轴运动处理组件&#xff0c;是一款六轴&#xff08;三轴加速度三轴角速度&#xff08;陀螺仪&#xff09;&#xff09;传感器。 内部主要结构 陀螺仪、加速度计、数字运动处理器DMP&#xff08;Digital Moti…

uniapp 轮播图(含组件封装,自动注册全局组件)

效果预览 组件封装 src\components\SUI_Swiper.vue 可参考官网配置更多属性 swipernavigator <script setup lang"ts"> import { ref } from vue defineProps({config: Object, })const activeIndex ref(0) const change: UniHelper.SwiperOnChange (e) &…

msvcp120.dll丢失是什么意思,哪个修复方法最简单

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“找不到msvcp120.dll”。这个错误通常发生在运行某些程序或游戏时&#xff0c;它会导致程序无法正常启动或运行。那么&#xff0c;这个错误提示到底是什么意思呢&#xff1f;为了解决这个问…

当老师应该选文科还是理科

教育不断发展和改革&#xff0c;教师职业的选择也越来越受到关注。许多人在选择专业时都会考虑成为一名教师&#xff0c;但对于选择文科还是理科却感到困惑。本文将探讨当老师应该选文科还是理科。 文科注重的是人文素养和社会科学方面的知识&#xff0c;而理科则注重自然科学和…

springcloud超市管理系统源码

技术说明&#xff1a; jdk1.8&#xff0c;mysql5.7&#xff0c;idea&#xff0c;vscode springcloud springboot mybatis vue elementui mysql 功能介绍&#xff1a; 后台管理&#xff1a; 统计分析&#xff1a;查看用户&#xff0c;商品&#xff0c;销售数量&#xff1b;…

王道p150 20.将给定的表达式树转化为等价的中缀表达式(通过括号反应操作符的计算次序)

本题代码如下 void btreetoexp(tree t, char deep) {if (t NULL)return;else if (t->lchild NULL && t->rchild NULL)printf("%c", t->data);//输出操作数&#xff0c;不加括号else {if (deep > 1)printf("(");btreetoexp(t->l…

职场Excel:求和家族,不简单

说到excel函数&#xff0c;很多人第一时间想到的就是求和函数sum。作为excel入门级函数&#xff0c;sum的确是小白级的&#xff0c;以至于很多人对求和函数有点“误解”&#xff0c;觉得求和函数太简单了。 但是&#xff0c;你可能不知道&#xff0c;sum只是excel求和家族里的一…

阿里入局鸿蒙!鸿蒙原生应用再添两员新丁

今日HarmonyOS微博称&#xff0c;阿里钉钉、蚂蚁集团旗下的移动开发平台mPaaS与华为达成合作&#xff0c;宣布启动鸿蒙原生应用的开发&#xff01;相关应用将以原生方式适配#HarmonyOS NEXT#系统。 #HarmonyOS#市场或迎来爆发式增长&#xff01; 阿里钉钉 阿里钉钉与华为达成合…

231123 刷题日报-动态规划

今天主要看了DP&#xff0c;前几天频繁遇到DP打击有点大。。 1. 0-1背包问题 要点&#xff1a; a. 三部曲&#xff1a; 1. 状态和选择 状态&#xff1a;物品序号、背包容量 选择&#xff1a;放、不放 2. dp数组定义、base case dp[i][w] 对于前i个物品&#xff0c;当前背包…

简单的用Python采集股票数据,保存表格后分析历史数据

前言 字节跳动如果上市&#xff0c;那么钟老板将成为我国第一个世界首富 趁着现在还没上市&#xff0c;咱们提前学习一下用Python分析股票历史数据&#xff0c;抱住粗大腿坐等起飞~ 好了话不多说&#xff0c;我们直接开始正文 准备工作 环境使用 Python 3.10 解释器Pychar…

检验LIS系统:医院信息管理的重要组成部分

检验LIS系统源码&#xff0c;云LIS系统源码 云LIS系统是医院信息管理的重要组成部分之一&#xff0c;集申请、采样、核收、计费、检验、审核、发布、质控、查询、耗材控制等检验科工作为一体的网络管理系统。LIS系统不仅是自动接收检验数据&#xff0c;打印检验报告&#xff0c…

WordPress网站如何修复数千个帖子的SEO错误

在本教程中&#xff0c;我们将向您展示如何解决您经常犯的SEO错误。 最好的是您不必花费太多时间&#xff0c;因为您不需要打开并编辑每个帖子。 相反&#xff0c;我们将向您展示如何使用 WordPress 内的电子表格来修复 WordPress 帖子的 SEO。 在这里&#xff0c;我们为您提…

机器学习---最大似然估计和贝叶斯参数估计

1. 估计 贝叶斯框架下的数据收集&#xff0c;在以下条件下我们可以设计一个可选择的分类器 : P(wi) (先验)&#xff1b;P(x | wi) (类条件密度) 但是。我们很少能够完整的得到这些信息! 从一个传统的样本中设计一个分类器&#xff1a; ①先验估计不成问题 ②对类条件密度…

分享5款工作和学习中,经常用到的软件

​ 如今&#xff0c;工作和学习都离不开电脑&#xff0c;所以电脑里的软件自然也是必不可少的&#xff0c;但是电脑软件那么多&#xff0c;不可能每个都装上吧&#xff0c;所以我们要装好用的、实用的&#xff0c;下面给大家分享5款好用到爆的软件&#xff0c;很多懂电脑的人都…