簡體   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