2015-04-01 39 views
0

出於某種原因,我在空(vector)運算符和向量中有什麼不一致。意外的C++向量行爲

if(myvector.empty())cout<<"My Vector is empty\n"; 
cout<<myvector.front()<<endl; 
cout<<myvector[0]<<endl; 
print(myvector); 

print()是我的功能,只需要一個矢量輸入和打印矢量。

出於某種原因,我的載體,它不應該是空的對myvector.empty()空回報,但它返回myvector.front()myvector[0]第一(和預期的)值,打印整個矢量然而時,沒有內容被打印。

任何想法?

+7

請形成[MCVE](http://stackoverflow.com/help/mcve)。如果一個向量是空的,違背它的約定調用'front'或使用'operator []'。 – chris 2015-04-01 00:42:30

+1

違反該合同會導致未定義的行爲,這可能包括諸如載體看起來既爲空又非空的行爲。對未定義的行爲可以獲得的怪異沒有限制。 – MSalters 2015-04-01 09:06:28

+1

我的錢是在「我寫了myvector [0] = 5;並且工作...」 – 2015-04-07 00:18:31

回答

2

當vector爲空時,您需要讓if語句切換到cout,否則行爲未定義。

簡單快捷的解決辦法是

if(myvector.empty()) 
{ 
    cout<<"My Vector is empty\n"; 
} 
else 
{ 
    cout<<myvector.front()<<endl; 
    cout<<myvector[0]<<endl; 
    print(myvector); 
} 
+1

我認爲它是真正的問題*不應該是空的*,但OP沒有顯示任何內容最後,所以我不知道我們應該如何回答它。 – chris 2015-04-01 01:02:46

1

這聽起來像你使用reserve爲您的矢量分配空間,但後,加入operator[]而非insertpush_back元素。

爲了實際添加元素到矢量中,您需要使用這些方法之一,而不僅僅是訪問使用[]的元素。這就是爲什麼你的矢量empty電話是真實的。通過純粹隨機的機會,你分配的內存確實有你期望的值。