今天遇到一个奇怪的问题,是有关于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 阅读(532)
评论(1) 编辑 收藏 引用 所属分类:
c++学习