今天遇到一個(gè)奇怪的問(wèn)題,是有關(guān)于vector的.
他一直提示: subcript out of range.這是指下標(biāo)越界的問(wèn)題,怎么也沒(méi)有理解如何下標(biāo)越界了.
代碼我這樣寫的:
for (size_t i= vc.size()-1; i >= 0; i--)
{
....
}
覺(jué)得這個(gè)問(wèn)題很蹊蹺,在什么地方越界的呢?
跟蹤了一下i值的變化,原來(lái)i值的變化并非按照我想像的那樣進(jìn)行,當(dāng)i為零后,再減一,并不是變?yōu)橐粋€(gè)負(fù)數(shù),而是變成了一個(gè)非常大的正數(shù),所以此時(shí)提醒越界了.
原來(lái)是這個(gè)原因.
對(duì)于vector的用法不是很熟,我暫時(shí)改為
int size = vc.size()-1;
for (int i = size; i>=0; i--)
{
......
}
這樣就解決了越界的問(wèn)題.
那么發(fā)生這個(gè)問(wèn)題的原因是什么呢?
我們需要清楚size_t的類型是什么?
size_t
有時(shí)就是unsigned int;
有時(shí)就是unsigned long;
通過(guò)這個(gè)我們就知道size_t是無(wú)符號(hào)整數(shù),所以這個(gè)問(wèn)題也就清楚了.
那有沒(méi)有很好的方法來(lái)解決這個(gè)問(wèn)題呢?
不像我那么笨的輸出呢?
有:
for (std::vector<int>::reverse_iterator i = vc.rbegin(); i < vc.rend(); i++)
{
......
}
這樣就把vctor中的元素顛倒了一個(gè)順序輸出了.
歡迎大家指教.
posted on 2008-12-29 11:37
Sandy 閱讀(547)
評(píng)論(1) 編輯 收藏 引用 所屬分類:
c++學(xué)習(xí)