春暖花开
雪化了,花开了,春天来了
posts - 149,comments - 125,trackbacks - 0

今天遇到一个奇怪的问题,是有关于vector的.
他一直提示: subcript  out of range.这是指下标越界的问题,怎么也没有理解如何下标越界了.
代码我这样写的:
for (size_t   i= vc.size()-1; i >= 0; i--)
{
     ....
}
觉得这个问题很蹊跷,在什么地方越界的呢?

跟踪了一下i值的变化,原来i值的变化并非按照我想像的那样进行,当i为零后,再减一,并不是变为一个负数,而是变成了一个非常大的正数,所以此时提醒越界了.

原来是这个原因.

对于vector的用法不是很熟,我暂时改为
int size = vc.size()-1;
for (int i = size; i>=0; i--)
{
 ......
}

这样就解决了越界的问题.

那么发生这个问题的原因是什么呢?

我们需要清楚size_t的类型是什么?
size_t   
 有时就是unsigned   int;   
有时就是unsigned   long;

通过这个我们就知道size_t是无符号整数,所以这个问题也就清楚了.

那有没有很好的方法来解决这个问题呢?
不像我那么笨的输出呢?

有:
for (std::vector<int>::reverse_iterator i = vc.rbegin(); i < vc.rend(); i++)
 {
    ......
 }

这样就把vctor中的元素颠倒了一个顺序输出了.

欢迎大家指教.

posted on 2008-12-29 11:37 Sandy 阅读(531) 评论(1)  编辑 收藏 引用 所属分类: c++学习

FeedBack:
# re: vector的一点疏忽
2009-11-13 02:00 | OwnWaterloo
嘿,我也这样载过……
后来我就这么写:
for (size_t i = v.size(); i-- ; )
        visit( v[i] );
 
当然,reverse_iterator也是可行的。
 
  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理