簡體   English   中英

C ++中的向量初始化

[英]Vector Initialisation in C++

我在我的代碼中使用Vectors。

導致錯誤的行如下:

vector<Node> alt_seq ;
alt_seq = vector<Node>(1000);
for(int j=0; j<alt_cf.getNoOfNodes(i); j++)
{
    Node temp_node = *alt_itr;
    alt_itr++;
    alt_seq.push_back(temp_node);
    }

這條線:

 alt_seq.push_back(temp_node);

導致運行時錯誤。 但是,如果我使用一些初始大小初始化Vector,如下所示:

vector<Node> alt_seq(1000) ;

在這種情況下,代碼工作正常。 但是我不想給出初始大小,因為向量中的對象數量在運行時是可變的。 請幫我。 我是C ++的新手。

供您參考,完整的Method函數在這里:

http://pastebin.com/2dUFEui5

您的Node類有一個CombinedFragment*類型的指針成員,稱為cfrag 如果您沒有定義自己的復制ctor和賦值運算符,則會創建懸空引用。 此外,如果Node負責分配/解除分配cfrag ,則需要適當的dtor來防止泄漏。 如果您不想深度復制CombinedFragment ,可以使用shared_ptr

此外, Node的默認ctor可能甚至不需要在那里(它將cfrag為未初始化狀態)。

我可以看到一個問題; 當你聲明1000個vector對象,然后執行push_back你將添加到矢量的末尾,即你想要添加的對象是1001,1002 ......等等。如果聲明1000個vector對象沒有t給你一個運行時錯誤,我首先會看到默認定義是什么(因為前1000個節點對象有默認值),因為這不是錯誤輸出並與我試圖加載的實際數據進行比較。 希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM