当前位置: 首页 > news >正文

【C++】vector

文章目录

  • 一、介绍
    • 1、初始化
    • 2、遍历
      • (1)for循环,下标访问
      • (2)迭代器
      • (3)范围for
    • 3、reserve接口
    • 4、resize接口
    • 5、插入
  • 二、存放及使用
    • 1、可存放基本数据类型
    • 2、string类型
    • 3、vector<>类型
      • 例题:杨辉三角
  • 三、谢谢观看!

一、介绍

vector可以理解为是一个顺序表

1、初始化

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

//初始化
void test1()
{vector<int> v1;vector<int> v2(10, 1);  //顺序表中元素为int类型,初始化为10个1vector<int> v3(v2.begin(), v2.end());//int类型,用v2的迭代器来初始化v3
}

v2、v3初始化细节:
在这里插入图片描述

2、遍历

三种方法:

(1)for循环,下标访问

void test2()
{vector<int> v1(10, 1);//1、for循环,通过下标访问for (int i = 0; i < v1.size(); i++){cout << v1[i] << " ";}cout << endl;
}

(2)迭代器

void test2()
{vector<int> v1(10, 1);//2、迭代器vector<int>::iterator it = v1.begin(); //声明一个迭代器it初始化为指向v1的第一个元素while (it != v1.end()){cout << *it << " ";it++;}cout << endl;
}

(3)范围for

void test2()
{vector<int> v1(10, 1);//3、范围forfor (auto e : v1){cout << e << " ";}cout << endl;
}

遍历结果:
在这里插入图片描述

3、reserve接口

在这里插入图片描述
扩空间,最少扩到n个元素空间。
在这里插入图片描述

4、resize接口

在这里插入图片描述
调整容器大小,使其能够容纳n个元素
在这里插入图片描述
在这里插入图片描述

5、插入

1、尾插push_back
在这里插入图片描述
2、头插insert
在这里插入图片描述

//插入
void test5()
{vector<int> v(10, 1);cout << "size: " << v.size() << "  ";cout << "capacity: " << v.capacity() << endl;v.push_back(4);  //尾插元素4v.insert(v.begin(), 6); //头插6v.insert(v.begin() + 3, 6); //第四个位置插入6cout << "size: " << v.size() << "  ";cout << "capacity: " << v.capacity() << endl;for (auto e : v){cout << e << " ";}cout << endl;
}

在这里插入图片描述

二、存放及使用

1、可存放基本数据类型

2、string类型

//存放string类型
vector<string> v1;
v1.push_back("aaabbb");
v1.push_back("cccddd");
for (const auto& e : v1)
{cout << e << endl;
}

在这里插入图片描述

3、vector<>类型

vector<vector< int >> :相当于二维数组

vector的成员组成:
在这里插入图片描述
画图分析:
在这里插入图片描述

//存放vector
//vector<vector<int>> vv;   //相当于二维数组
//10*5的二维数组,10行5列
vector<int> v(5, 1);
vector<vector<int>> vv(10, v);
//访问
cout << vv[4][3] << endl;

访问时通过下标访问,实际上是两重operator[ ]

vv[4][3] 等价于 v.operator[](4).operator[](3)

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

  • 遍历
//遍历
for (int i = 0; i < vv.size(); i++)   //vv.size() 行数
{for (int j = 0; j < vv[i].size(); j++)cout << vv[i][j];cout << endl;
}

使用vector构建数组比单纯的构建二维数组更加方便,可以动态开辟空间更加便捷。

例题:杨辉三角

在这里插入图片描述

注:该题需要开辟动态数组,二维数组的第一行有1个元素,第二行有2个元素,……第n行有n个元素

class Solution {
public:vector<vector<int>> generate(int numRows) {vector<vector<int>> vv(numRows); //为容器vv开numRows行for(int i=0;i<numRows;i++){vv[i].resize(i+1,1); //每行开辟i+1个空间并初始化为1}//赋值for(int i=2;i<vv.size();i++){for(int j=1;j<vv[i].size()-1;j++){vv[i][j]=vv[i-1][j]+vv[i-1][j-1];}}return vv;}
};

在这里插入图片描述

三、谢谢观看!

http://www.dtcms.com/a/391908.html

相关文章:

  • LeeCode120. 三角形最小路径和
  • 元启发式算法分类
  • Ansible-file模块
  • Vue项目使用Coze的聊天窗(一)
  • 关于将tomcat、nginx 实现 注册window服务并实现自启动
  • 【精品资料鉴赏】358页 数字政府大数据中心资源平台治理建设方案
  • 关于Spring Bean之间的循环依赖
  • pake将前端web项目打包成windows可安装文件
  • 低轨卫星应用:MCU、CANFD与DCDC芯片的集成解决方案
  • AI 编程Claude Code使用详细教程
  • vue3 下载文件方式(包括通过url下载文件并修改文件名称,和文件流下载方式)
  • 如何高效筛选海量文献,避免浪费时间?
  • heyday
  • Go语言结构体初始化全面指南与最佳实践
  • 神经网络学习笔记15——高效卷积神经网络架构GhostNet
  • Mysql的Exists条件子查询
  • 电脑系统windows10怎么合盘
  • 一文详解Stata回归分析
  • GPS 定位:连接时空的数字导航革命
  • Rust 特有关键字及用法
  • 关于C++游戏开发入门:如何从零开始实现一个完整的游戏项目!
  • OpenRank结合游戏及算法技术原理
  • 协方差矩阵、皮尔逊相关系数
  • Redis 三大架构模式详解:主从复制、哨兵、Cluster 搭建全指南
  • [x-cmd] 如何安全卸载 x-cmd
  • 整体设计 语言拼凑/逻辑拆解/词典缝合 之 3 词典缝合(“他”):显露词典编纂行列式项的 “自然”三“然”:自然本然/ 自然而然/自然实然
  • linux配置ssh,亲测简单可用
  • SNMP 模块化设计解析
  • 2025的Xmind自定义安装(实测版)
  • AI“闻香识酒”:电子鼻+机器学习开启气味数字化新纪元