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

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;

}

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构/C++】线性表_顺序表的基本操作

#include <iostream> using namespace std; #define MaxSize 10 // 1. 顺序表 // 静态分配 typedef struct {int data[MaxSize];int length; // 当前长度 } SqList; // 静态分配初始化顺序表 void InitList(SqList &L) {for (int i 0; i < MaxSize; i){L.data[i]…

基于yolov2深度学习网络的喝水行为检测系统matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1、YOLOv2网络原理 4.2、基于YOLOv2的喝水行为检测 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 clc; clear; close all; warning off;…

Django之中间件与CSRF_TOKEN

文章目录 一、什么是中间件二、中间件有什么用三、Django自定义中间件中间件中主要方法及作用创建自定义中间件的步骤&#xff1a;process_request与process_response方法process_view方法process_exceptionprocess_template_response&#xff08;不常用&#xff09; 四、CSRF_…

python之pyqt专栏1-环境搭建

#python pyqt# python&#xff1a;3.11.6 pycharm&#xff1a;PyCharm Community Edition 2023.2.5 pyqt6 python安装 官网下载&#xff1a;Python Releases for Windows | Python.org pycharm社区版安装 官网地址&#xff1a;Download PyCharm: Python IDE for Professional…

Redis的性能,哨兵模式,集群,

Redis的性能管理; redis的数据保存在内存中 redis-cli info memory redis内存使用info memory命令参数解析 used_memory:236026888 由 Redis 分配器分配的内存总量&#xff0c;包含了redis进程内部的开销和数据占用的内存&#xff0c;以字节&#xff08;byte&#xff09…

安卓现代化开发系列——从生命周期到Lifecycle

由于安卓已经诞生快二十载&#xff0c;其最初的开发思想与现代的开发思想已经大相径庭&#xff0c;特别是Jetpack库诞生之后&#xff0c;项目中存在着新老思想混杂的情况&#xff0c;让许多的新手老手都措手不及&#xff0c;项目大步向屎山迈进。为了解决这个问题&#xff0c;开…

【双指针】有效三角形的个数

有效三角形的个数 611. 有效三角形的个数 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给定一个包含非负整数的数组 nums &#xff0c;返回其中可以组成三角形三条边的三元组个数。 示例 1: 输入: nums [2,2,3,4] 输出: 3 解释:有效的组合是: 2,3,4 (使用第一个 2…

upload-labs关卡13(基于白名单的0x00截断绕过)通关思路

文章目录 前言一、回顾上一关知识点二、靶场第十三关通关思路1、看源代码2、bp进行0x00截断绕过3、蚁剑连接 总结 前言 此文章只用于学习和反思巩固文件上传漏洞知识&#xff0c;禁止用于做非法攻击。注意靶场是可以练习的平台&#xff0c;不能随意去尚未授权的网站做渗透测试…

设计模式——行为型模式(二)

6.8 迭代器模式 6.8.1 概述 定义:提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。 6.8.2 结构 迭代器模式主要包含以下角色: 抽象聚合(Aggregate)角色:定义存储、添加、删除聚合元素以及创建迭代器对象的接口。具体聚合(ConcreteAggreg…

Java项目如何打包成Jar(最简单)

最简单的办法&#xff0c;使用Maven插件&#xff08;idea自带&#xff09; 1.选择需要打包的mudule&#xff0c;点击idea右侧的maven插件 2.clean操作 3.选择需要的其他mudule&#xff0c;进行install操作&#xff08;如果有&#xff09; 4.再次选择需要打包的module&#…

Spring Beans;Spring Bean的生命周期;spring Bean的作用域,spring处理线程并发问题

文章目录 Spring Beans请解释Spring Bean的生命周期解释Spring支持的几种bean的作用域Spring容器中的bean可以分为5个范围&#xff1a; Spring如何处理线程并发问题&#xff1f; 在现在的项目开发中经常使用到spring bean&#xff0c;那么来谈谈spring bean的生命周期&#xff…

基于DCT变换的图像压缩解压缩算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1、DCT变换原理 4.2、基于DCT的图像压缩 4.3、基于DCT的图像解压缩 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 ...................…

51单片机应用从零开始(七)·循环语句(if语句,swtich语句)

51单片机应用从零开始&#xff08;一&#xff09;-CSDN博客 51单片机应用从零开始&#xff08;二&#xff09;-CSDN博客 51单片机应用从零开始&#xff08;三&#xff09;-CSDN博客 51单片机应用从零开始&#xff08;四&#xff09;-CSDN博客 51单片机应用从零开始&#xff08;…

IIC驱动OLED HAL库+CubeMX

一.IIC传输数据的格式 1.写操作 2.读操作 3.IIC信号 二. IIC底层驱动 #define SCL_PIN GPIO_PIN_6 #define SDA_PIN GPIO_PIN_7#define SCL_PORT GPIOB #define SDA_PORT GPIOB/********************** 函数宏定义 **********************/ #d…

揭秘周杰伦《最伟大的作品》MV,绝美UI配色方案竟然藏在这里

色彩在UI设计的基本框架中占据着举足轻重的位置。实际上&#xff0c;精心挑选和组合的色彩配色&#xff0c;往往就是UI设计成功的不二法门。在打造出一个实用的UI配色方案过程中&#xff0c;我们需要有坚实的色彩理论知识&#xff0c;同时还需要擅于从生活中观察和提取灵感。以…

3、如何从0到1去建设数据仓库

1、数仓实施过程 1.1 数据调研 数据调研包括&#xff1a;业务调研、需求调研 业务调研 需要调研企业内有哪些业务线、业务线的业务是否还有相同点和差异点 各个业务线有哪些业务模块&#xff0c;每个模型下有哪些业务流程&#xff0c;每个流程下产生的数据 是怎样存储的 业务调…

Spring Boot集成MyBatis实现多数据源访问的“秘密”

文章目录 为什么需要多数据源&#xff1f;Spring Boot集成MyBatis的基础配置使用多数据源小结 &#x1f389;Spring Boot集成MyBatis实现多数据源访问的“秘密” ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&#xff1a;IT陈寒的博客&#x1f388;该系列文章专栏&…

技术面时,一定要掌握这3个关键点

前言 现在有这么多优秀的测试工程师&#xff0c;大家都知道技术面试是不可避免的一个环节&#xff0c;一般技术面试官都会通过自己的方式去考察你的技术功底与基础理论知识。 如果你参加过一些大厂面试&#xff0c;肯定会遇到一些这样的问题&#xff1a; 1、看你项目都用到了…

Navicat 技术指引 | 连接 GaussDB 主备版

Navicat Premium&#xff08;16.2.8 Windows版或以上&#xff09; 已支持对GaussDB 主备版的管理和开发功能。它不仅具备轻松、便捷的可视化数据查看和编辑功能&#xff0c;还提供强大的高阶功能&#xff08;如模型、结构同步、协同合作、数据迁移等&#xff09;&#xff0c;这…

【网络奇缘】- 计算机网络|分层结构|ISO模型

&#x1f308;个人主页: Aileen_0v0&#x1f525;系列专栏: 一见倾心,再见倾城 --- 计算机网络~&#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 目录 计算机网络分层结构 OSI参考模型 OSI模型起源 失败原因: OSI模型组成 协议的作用 &#x1f4dd;全文…