意外的C ++向量行为

时间:2015-04-01 00:40:22

标签: c++ vector

出于某种原因,我在empty()向量运算符与向量中的内容之间存在差异。

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]的第一个(也是预期的)值,但是在打印整个矢量时,不会打印任何内容。

有什么想法吗?

2 个答案:

答案 0 :(得分: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 :(得分:1)

听起来您使用reserve为您的向量分配空间,但随后使用operator[]而不是insertpush_back添加了元素。

为了实际向向量添加元素,您需要使用其中一种方法,而不仅仅是使用[]访问元素。这就是您的向量empty调用为真的原因。通过纯随机机会,您分配的内存确实具有您期望的值。