[英]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.