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;}

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

杨传辉:从一体化架构,到一体化产品,为关键业务负载打造一体化数据库

在刚刚结束的年度发布会上&#xff0c;OceanBase正式推出一体化数据库的首个长期支持版本 4.2.1 LTS&#xff0c;这是面向 OLTP 核心场景的全功能里程碑版本&#xff0c;相比上一个 3.2.4 LTS 版本&#xff0c;新版本能力全面提升&#xff0c;适应场景更加丰富&#xff0c;有更…

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…

C/C++小写字母的判断 2022年3月电子学会中小学生软件编程(C/C++)等级考试一级真题答案解析

目录 C/C小写字母的判断 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C/C小写字母的判断 2022年3月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 输入一个字符&#xff0c;判断是否是英文小…

SpringBoot + 通义千问 + 自定义React组件,支持EventStream数据解析!

一、前言 大家好&#xff01;我是sum墨&#xff0c;一个一线的底层码农&#xff0c;平时喜欢研究和思考一些技术相关的问题并整理成文&#xff0c;限于本人水平&#xff0c;如果文章和代码有表述不当之处&#xff0c;还请不吝赐教。 最近ChatGPT非常受欢迎&#xff0c;尤其是…

vue + docxtemplater 导出 word 文档

一、痛点 word 导出 这种功能其实之前都是后端实现的&#xff0c;但最近有个项目没得后端。所以研究下前端导出。 ps&#xff1a; 前端还可以导出 pdf&#xff0c;但是其分页问题需要话精力去计算才可能实现&#xff0c;并且都不是很完善。可参考之前的文章&#xff1a;利用 h…

PostgreSQL Patroni 3.0 新功能规划 2023年 纽约PG 大会 (音译)

开头还是介绍一下群&#xff0c;如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;&#xff08;…

81基于matlab GUI的图像处理

基于matlab GUI的图像处理&#xff0c;功能包括图像颜色处理&#xff08;灰度图像、二值图像、反色变换、直方图、拉伸变换&#xff09;&#xff1b;像素操作&#xff08;读取像素、修改像素&#xff09;、平滑滤波&#xff08;均值平滑、高斯平滑、中值平滑&#xff09;、图像…

在arm 64 环境下使用halcon算法

背景&#xff1a; halcon&#xff0c;机器视觉领域神一样得存在&#xff0c;在windows上&#xff0c;应用得特别多&#xff0c; 但是arm环境下使用得很少。那如何在arm下使用halcon呢。按照官方说明&#xff0c;arm下只提供了运行时环境&#xff0c;并且需要使用价值一万多人民…

UE5 UI教程学习笔记

参考资料&#xff1a;https://item.taobao.com/item.htm?spma21n57.1.0.0.2b4f523cAV5i43&id716635137219&ns1&abbucket15#detail 基础工程&#xff1a;https://download.csdn.net/download/qq_17523181/88559312 1. 介绍 工程素材 2. 创建Widget UE5 UI系统的…

工业一体全国产方案,米尔T113核心板

入门级HMI屏作为嵌入式系统中重要组成部分&#xff0c;大部分都是串口屏&#xff1b;其功能简单、成本低等特点&#xff0c;使用历史悠久、应用广泛&#xff0c;而随着信息技术的快速发展&#xff0c;行业需求不断升级&#xff0c;工程师使用了大量串口屏后&#xff0c;发现串口…

请你说一下Vue中v-if和v-for的优先级谁更高

v-if 与 v-for简介 v-ifv-forv-if & v-for使用 v-if 与 v-for优先级比较 vue2 中&#xff0c;v-for的优先级高于v-if 例子进行分析 vue3 v-if 具有比 v-for 更高的优先级 例子进行分析 总结 在vue2中&#xff0c;v-for的优先级高于v-if在vue3中&#xff0c;v-if的优先级高…

加速软件开发:自动化测试在持续集成中的重要作用!

持续集成的自动化测试 如今互联网软件的开发、测试和发布&#xff0c;已经形成了一套非常标准的流程&#xff0c;最重要的组成部分就是持续集成&#xff08;Continuous integration&#xff0c;简称CI&#xff0c;目前主要的持续集成系统是Jenkins&#xff09;。 那么什么是持…