簡體   English   中英

初始化std :: vector的大小

[英]Initializing the size of std::vector

這可能是一個基本問題。我有一個看起來像這樣的課:

class Foo {

    private:

    vector<MyStructure> data;

    public:

    void read(const cv::FileNode& node) {
        // read data from file

        cv::FileNode n = node["MyStructure"]; 
        cv::FileNodeIterator it = n.begin(), it_end = n.end(); 
        for (int i = 0; it != it_end; ++it, ++i) {
            *it >> data[i];   // there's a problem here. 
        }
    }

}

請注意, it是一個指向容器n MyStructure元素的迭代器。 這是我的問題。 我事先不知道vector<MyStructure> data的大小(在構造對象時)。 因此,我不能僅僅分配*it >> data[i] 該代碼可以編譯,但是會因運行時錯誤而崩潰。 我怎樣才能解決這個問題? 如果可能,該解決方案需要高效(也就是說,應避免制作太多MyStructure對象副本)。

MyStructure temp;
*it >> temp;
data.push_back(std::move(temp));

這樣可以避免制作太多MyStructure對象的副本。 它只制作足夠的副本。

如果n是具有size成員函數的容器,請首先執行以下操作:

data.reserve(n.size());

也許:

std::deque<int> accumulate;
for(...) accumulate.push_back(...);
// Getting a continuous vector
std::vector result(accumulate.begin(), accumulate.end()):

暫無
暫無

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

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