繁体   English   中英

意外的C ++向量行为

[英]Unexpected C++ Vector Behavior

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

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

print()是我的函数,仅接受向量输入并打印向量。

出于某种原因,我的向量(不应为空myvector.empty()将为myvector.empty()返回空myvector.empty() ,但是它将返回myvector.front()myvector[0]的第一个(和预期值myvector.front() ,但是在打印整个向量时,不打印任何内容。

有任何想法吗?

当vector为空时,您只需要让if语句切换到cout,否则行为是不确定的。

一个简单而快速的解决方法是

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

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

为了将元素实际添加到向量中,您需要使用执行此操作的方法之一,而不仅仅是使用[]访问元素。 这就是为什么您的向量empty用为true的原因。 通过完全随机的机会,您分配的内存确实具有您期望的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM