尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
C++的二维vector和C的二维数组学习
C的二维vector和C的二维数组学习参考了http://blog.csdn.net/zhuqinglu/article/details/1805050可通过下列代码直接创建m*n的二维vectorvectorvector int ivec(m ,vectorint(n)); //m*n的二维vector动态创建m*n的二维vector方法一vectorvector int ivec;ivec.resize(m);for(int i0;im;i) ivec[i].resize(n);方法二vectorvector int ivec;ivec.resize(m,vectorint(n));动态创建二维数组a[m][n]C语言版创建代码#includemalloc.h int **a(int **)malloc(m*sizeof(int *)); for(int i0;im;i) a[i](int *)malloc(n*sizeof(int));释放代码for (i0;im;i) { free(data[i]); } free(data);C版创建代码:int **anew int*[m]; for(int i0;im;i) a[i]new int[n];释放代码for(int i 0; i ! m; i) { delete[] p[i]; } delete[] p;初始化二维数组int a[2][2] {{1,2},{3,4}};初始化二维vector:如果全初始化为0vectorvector int ivec(m ,vectorint(n,0)); //m*n的二维vector所有元素为0也可以用vectorvectorint A; A.resize(m, vectorint(n, 0));注意上例中n固定。但二维vector的第二维的size()并不一定要是常数如下例中的三个vector组成的二维vector其大小分别为123。这一点跟C的二维数组不一样。vectorvectorint vecSet; for(int i 1; i 3; i) vecSet.push_back(vectorint(i,0));如果初始化为不同值vectorvectorint a {{1,2}, {3,4}};注意与上面的C的二维数组区别这里a的后面加不加号都可以。如果C的class里面定义了vector可以在class的constructor里面初始化比如class Myclass { public: Myclass(int m_size): v1(my_size,0), v2(m_size, 0){} ... private: vectorint v1, v2; }如果想遍历二维vector(按vector一个一个来)可以用C 11的auto比如#include iostream #include vector using namespace std; int main() { vectorvectorint v {{1,2}, {3,4}}; for (const auto inner : v) { for (const auto item : inner) { cout item ; } } cout endl; return 0; }定义一个二维数组第一维有26个但第二维不定。vectorvectorint vecs(26, vectorint());三维vector怎么定义呢 一个例子如下vectorvectorvectorbool dp (n, vectorvectorbool (n, vectorbool(n 1, false)));另一个三维vector的初始化例子:vectorvectorvectorint dp(len 1, vectorvectorint(k 1, vectorint(target 1, 0)));二维vector的初始化如下:假设已经有vectorvectorbool board;vectorvectorbool mask(board.size(), vectorbool(board[0].size(), true));下面是一些关于C/C 二维数组初始化的资料引用自C语言二维数组的定义、初始化、赋值二维数组的初始化赋值二维数组的初始化可以按行分段赋值也可按行连续赋值。例如对于数组 a[5][3]按行分段赋值应该写作int a[5][3]{ {80,75,92}, {61,65,71}, {59,63,70}, {85,87,90}, {76,77,85} };按行连续赋值应该写作int a[5][3]{80, 75, 92, 61, 65, 71, 59, 63, 70, 85, 87, 90, 76, 77, 85};这两种赋初值的结果是完全相同的。对于二维数组的初始化还要注意以下几点1) 可以只对部分元素赋值未赋值的元素自动取“零”值。例如int a[3][3] {{1}, {2}, {3}};是对每一行的第一列元素赋值未赋值的元素的值为 0。赋值后各元素的值为1 0 02 0 03 0 0再如int a[3][3] {{0,1}, {0,0,2}, {3}};赋值后各元素的值为0 1 00 0 23 0 02) 如果对全部元素赋值那么第一维的长度可以不给出。例如int a[3][3] {1, 2, 3, 4, 5, 6, 7, 8, 9};可以写为int a[][3] {1, 2, 3, 4, 5, 6, 7, 8, 9};3) 二维数组可以看作是由一维数组嵌套而成的如果一个数组的每个元素又是一个数组那么它就是二维数组。当然前提是各个元素的类型必须相同。根据这样的分析一个二维数组也可以分解为多个一维数组C语言允许这种分解。例如二维数组a[3][4]可分解为三个一维数组它们的数组名分别为 a[0]、a[1]、a[2]。这三个一维数组可以直接拿来使用。这三个一维数组都有 4 个元素比如一维数组 a[0] 的元素为 a[0][0]、a[0][1]、a[0][2]、a[0][3]。如果要返回一个二维空vector可以用return vectorvectorint();好像也可以用return {{}};下面内容参考链接https://blog.csdn.net/shizheng_Li/article/details/105862560圆括号vectorint v(n)圆括号是构造函数表示1个容量为n的vector方括号vectorint v[n] :表示n个vector v 二维数组相当于 vectorvectorint v(n)二维数组举例vector v(10) 表示 一个容量10的vectorvector v[10] 表示10个容量不确定的vector组成的二维数组//////////////////二维数组斜向遍历假设二维数组的大小 \(n 4\)当 \(l\) 从 2 递增到 4 时遍历的区间 \([i, j]\) 顺序如下\(l 2\)长度为 2 的斜线即紧邻主对角线的上方\(i 0 \rightarrow [0, 1]\)\(i 1 \rightarrow [1, 2]\)\(i 2 \rightarrow [2, 3]\)\(l 3\)长度为 3 的斜线\(i 0 \rightarrow [0, 2]\)\(i 1 \rightarrow [1, 3]\)\(l 4\)长度为 4 的斜线\(i 0 \rightarrow [0, 3]\)每次外层循环 \(l\) 增加时实际上是在遍历平行于主对角线的右上方的另一条斜线。// 斜着遍历数组for (let l 2; l n; l) {for (let i 0; i n - l; i) {let j l i - 1;// 计算 dp[i][j]}}
RELATED

相关推荐

VC载具框架:游戏模组开发中的车辆系统标准化解决方案

VC载具框架:游戏模组开发中的车辆系统标准化解决方案

这次我们来看一个游戏模组开发领域的技术项目——VC载具框架。这是一个专门为游戏开发者设计的车辆系统模组框架,重点解决游戏中载具操作和车内系统的标准化实现问题。 从项目名称可以看出,VC载具框架主要包含两大核心模块:车辆操作系统和车内交互系统。车辆操作系统负责处…

📅 2026/8/6 7:27:47
VC载具框架:游戏开发中的车辆系统标准化解决方案

VC载具框架:游戏开发中的车辆系统标准化解决方案

这次我们来看一个游戏开发领域的技术框架——VC载具框架。这个由KDC-ModGroup团队开发的框架专注于为游戏提供完整的车辆操作和车内系统解决方案,特别适合需要复杂载具交互的开放世界或模拟类游戏项目。 VC载具框架的核心价值在于它提供了一套标准化的车辆控制系统,从基础驾…

📅 2026/8/6 20:45:27
Zotero PDF Translate插件:学术研究的终极翻译利器

Zotero PDF Translate插件:学术研究的终极翻译利器

Zotero PDF Translate插件:学术研究的终极翻译利器 【免费下载链接】zotero-pdf-translate Translate PDF, EPub, webpage, metadata, annotations, notes to the target language. Support 20 translate services. 项目地址: https://gitcode.com/gh_mirrors/zo/…

📅 2026/8/9 6:08:10
MORE NEWS

更多资讯

📰

C++数组完全指南:一维二维、指针与性能优化实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

FFmpeg字幕合并实战:从硬字幕烧录到软字幕封装避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

华为硬件工程师机试实战指南:从信号完整性到单板开发能力图谱

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

串口服务器里子拆解:从串口转TCP到远程调试,老设备的联网秘密

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

claude-skills 的 Python CLI 开发实战:基于 Typer、Click、Rich 与 questionary 构建专业命令行工具

claude-skills 的 Python CLI 开发实战:基于 Typer、Click、Rich 与 questionary 构建专业命令行工具 【免费下载链接】claude-skills 67 Specialized Skills for Full-Stack Developers. Transform Claude Code into your expert pair programmer. 项目地址: htt…

📰

es-toolkit/compat 的 takeRight:从数组尾部安全截取元素的 Lodash 兼容实现

es-toolkit/compat 的 takeRight:从数组尾部安全截取元素的 Lodash 兼容实现 【免费下载链接】es-toolkit A modern JavaScript utility library thats 2-3 times faster and up to 97% smaller, a major upgrade to lodash. 项目地址: https://gitcode.com/GitHu…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬