社区
C++ 语言
帖子详情
vector 下标问题
anuosix
2008-11-10 01:08:10
这些下标是怎么回事
...全文
1085
29
打赏
收藏
vector 下标问题
这些下标是怎么回事
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
29 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
anuosix
2008-11-12
打赏
举报
回复
找到原因了,是在release模式下debug产生的问题,结贴
OenAuth.Net
2008-11-10
打赏
举报
回复
发图的时间足够发代码啦
太乙
2008-11-10
打赏
举报
回复
看不大清楚,lz,可不可以直接贴代码,而不是图片啊!!
wangjkk
2008-11-10
打赏
举报
回复
不定义大小,size值为0
std::vector <vertexDescripter> vtrVtx;
这样定义的话!!!
你不push_back元素进去,size值还是为0;
有点不明白你说的意思了,个人觉得你这样用vector有问题
建议你试一下定义到类全局变量里试试
再查找一下自己的定义,是不是有死循环一类的BUG
anuosix
2008-11-10
打赏
举报
回复
说明两点:
(1)即使只是使用类似于:
std::vector<vertexDescripter> vtrVtx;
这种形势,所得结果是一样的,程序运行到这个断点,就会发现下标那么大,居然达到几十亿,太恐怖了
(2)用什么resize()和reserve()等函数根本就没有用,有时候用一下它会缩小一些,但是还是好几万的数值而并不是按
照我指定的值来进行调整
不明白怎么回事
如果在定义的时候不指定大小,不是有一个默认值的么,那这个默认值不可能这么大阿
wangjkk
2008-11-10
打赏
举报
回复
....
那也得看有这个想访问的下标才行!!
不然就越界了!
yshuise
2008-11-10
打赏
举报
回复
可以在程序中加一行代码:
(*(vtr.begin()+K))//k为你想访问的下标
wangjkk
2008-11-10
打赏
举报
回复
不能这样定义vector变量!!
建议你再去查看一下vector含义
Vector 类可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。但是, Vector 的大小可以根据需要增大或缩小....
像你这样直接定义下界,当然不可以了!!!
可以用push_back增加对象元素,但不能直接给定最大下界!
还有,像你这样定义,是定义了局部变量,在其它函数里是访问不到的
如果要让其它函数也访问到,需要在.h里定义一个类全部变量!!
wangjkk
2008-11-10
打赏
举报
回复
再有:用完vectoer释放空间!
多试试!
嘿,嘿,也许不小心就解决问题了!
wangjkk
2008-11-10
打赏
举报
回复
你试一下,先不定义边界大小
用push_back填入新增加的元素试试!
再有楼上说的也可能是一个原因.
改变vectoer大小之后,引用vectoer要重新定位!
小猴饲养员
2008-11-10
打赏
举报
回复
每改变一次vectoer的大小,就要重新计算一次 v1.end()
//vector<type> v1;
anuosix
2008-11-10
打赏
举报
回复
赫赫,可能我的代码不清晰
通过没有问题的,而且在数据量小的时候还能得到正确结果,但是一旦数据量变大,就会出现"内存不足"的对话框,关于这个我都开了好几个帖子了,就是没有人能够解决问题
这是我在调试的时候发现的问题,不知道和那个内存不足有没有关系,我在一个国外论坛也发贴询问,那里有个人问我能不能直接运行,我说可以,他还没有回答,听他的意思有可能这个问题并不算什么问题,我不太明白了
wangjkk
2008-11-10
打赏
举报
回复
不是不能,是定义变量的时候,是千万不能放在循环里定义,这是禁忌!!!
这话我收回
代码定义要灵活!也不是说不能在循环里头定义,只要是临时引用的变量,都可以局部定义变量!
绕的我都晕晕,错误百出了!!!
想想,好像我上面的都说错了,没有绝对的好方法好思路,只有最合适最方便的方法和思路!
叠代码是讲究算法的工程!
你D编码习惯我是不清楚啦,个有个的想法看法!!!
编译不过,你就试试换个角度的看法嘛,别钻牛角尖嘛!
anuosix
2008-11-10
打赏
举报
回复
其实这个地方我用size()函数取了一下大小,这个大小倒是正确的,比如vtrIntersect的size为100,但是为什么调试的时候会这样呢,看着我都有点害怕,一个vector居然有几十个亿的大小
另外,这个程序在运行的时候会出现"内存不足"的对话框,不知道和这个有没有关系
如果说超出了作用域,但是大家看我图中断点并没有超出阿,真是郁闷
anuosix
2008-11-10
打赏
举报
回复
这个我觉得没有什么区别的吧,我循环体内定义的虽然没有保存,但是会有别的地方用到的,比如在循环体内调用的函数中会用到这些值,虽然变量本身不能保存,但是总会有处理过这些值保存起来的地方,不然我还要循环要变量干什么呢,而且如果有多个循环,变量都不同,都在外边定义不就乱套了么
wangjkk
2008-11-10
打赏
举报
回复
再补充一句:
在循环外部定义,用完数据如果冗余,可以清空vector一下再用,不用重复每次重复定义!
anuo06
2008-11-10
打赏
举报
回复
还不让连续三次发贴,只好换个马甲了,还是我
察看那些vector的元素,还出现这种情况
而另外一个函数中也有类似的定义,但是那个就是好的,不会有这么大的下标
anuo06
2008-11-10
打赏
举报
回复
在这些下标表示的值中还出现了这种情况:
wangjkk
2008-11-10
打赏
举报
回复
...
vector作局部变量,你还要用它做啥,直接定义一个临时数组就行了!!!
用的着用vector这么复杂吗!!!
不是不能,是定义变量的时候,是千万不能放在循环里定义,这是禁忌!!!
你想啊,一直重复定义!!变量一直在变!!变量值一直没被保存起来,你引用它还有意义吗!!!循环,循环是啥..不言而喻的东西!!!
结构体+vector...不是像你这样用D!
yihan7h
2008-11-10
打赏
举报
回复
楼上正解
加载更多回复(9)
vector
的动态扩容机制与
下标
越界
问题
文章探讨了C++中数组和
vector
下标
越界的
问题
,指出动态扩容并不保证防止越界。解释了
vector
的动态扩容原理,size()与capacity()的区别,以及扩容时的内存管理策略。同时提到了访问越界元素可能导致未定义行为,而at()函数可以进行边界检查。文章还讨论了其他STL容器的动态扩容特性和时间复杂度。
vector
中
下标
[]操作、迭代器与size()在使用中遇到的
问题
本文深入探讨了C++中
vector
容器的正确使用方法,包括通过
下标
与迭代器进行元素的写入与读取,指出了直接通过
下标
写入空容器的潜在
问题
,并提供了正确的实践建议。
三维栅格地图映射到一维
vector
数组的
下标
号如何确定
问题
博客主要探讨三维栅格地图映射到一维
vector
数组时,
下标
号如何确定的
问题
,介绍了从zy面开始一列一列装的理解方式,还提及了实现代码。
关于
vector
的
问题
,只能用size的循环实现输出,此外,取
vector
内的值可以用
下标
取出
本文介绍了一种使用C++标准模板库(STL)中的
vector
容器来存储整数,并通过for循环遍历输出的方法。示例代码展示了如何声明
vector
容器、填充数据以及遍历输出这些数据。
List(
vector
)实现循环队列中
下标
变化
问题
本文探讨了利用List实现循环队列的设计思路,通过创建一个带有头部和尾部指针的
Vector
来模拟队列操作。在执行出队操作时,发现List的特性导致元素自动填补空缺,这与循环队列的预期行为不符,揭示了List不适合直接用于构建循环队列的本质
问题
。
C++ 语言
65,210
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章