| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3806 人关注过本帖
标题:C++中变量、数组和vector对象初始化的问题
只看楼主 加入收藏
wang20080441
Rank: 1
等 级:新手上路
帖 子:4
专家分:8
注 册:2018-10-30
结帖率:0
收藏
已结贴  问题点数:20 回复次数:3 
C++中变量、数组和vector对象初始化的问题
最近偶然发现,vector与数组的初始化存在区别,对其原理不解,希望高人指点。
环境为VS 2013。
代码一如下:
    int height = 3;
    int width = 4;
    int area = height * width;
    float cell = 1.0 / float(area);

    int map[height][width];
编译结果:
error C2087: “map”: 缺少下标
error C2133: “map”: 未知的大小

代码二如下:
    int height = 3;
    int width = 4;
    int area = height * width;
    float cell = 1.0 / float(area);

    vector< vector <float> > newGrid(height, vector<float>(width, cell));
编译结果:
    成功

    那么问题是,为什么数组不能以已经初始化的变量作为下标,而vector却能以之作为初始化参数呢?难道数组内存的分配和vector对象的内存分配不是在同一时刻进行的吗?如果不是,那么分别是在什么时候呢。
    此外,注意到变量area的初始化同样直接使用了之前的变量。那是否意味着数组内存分配是在所有变量初始化之前?
    希望有经验的同学指点一二。




搜索更多相关主题的帖子: 变量 数组 vector 初始化 int 
2018-10-30 11:05
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:20 
因为  height 和 width 是变量, int map[height][width]; 编译器并不知道你需要多少空间的内存
int *map = new sizeof(int) * height * width; 即可
或者将 height 和 width 改为 宏定义。主要是需要在编译器编译时候,能知道这块空间的大小

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2018-10-31 23:31
wang20080441
Rank: 1
等 级:新手上路
帖 子:4
专家分:8
注 册:2018-10-30
收藏
得分:0 
回复 2楼 yuccn
恩,我猜是这样的,所以我比较好奇的是,vector <>的空间分配不是在变量定义的时候同时进行的,是么?我以为vector<>的分配是和数组分配同时做的
2018-11-01 22:32
rjsp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:0 
以下是引用wang20080441在2018-11-1 22:32:20的发言:

恩,我猜是这样的,所以我比较好奇的是,vector <>的空间分配不是在变量定义的时候同时进行的,是么?我以为vector<>的分配是和数组分配同时做的

int map[height][width]; 编译时就需要确定其大小,而 height 和 width 却是个运行时才确定的变量。
vector< vector <float> > 其内部就是一个指针,指向上的数据

简单而言,就是
int map[n];

int* p = new int[n];
的区别。
2019-03-27 16:41
快速回复:C++中变量、数组和vector对象初始化的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.038678 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved