2015-04-01 23 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电话是真实的。通过纯粹随机的机会,你分配的内存确实有你期望的值。