![](/img/trans.png)
[英]Remove elements (and change size) of std::vector without affecting allocated memory
[英]Empty a std::vector without change its size
我想在for循環中重用std::vector
。 但是,對於for循環的每個迭代步驟,我都需要向量為空。
問題:如何在不以最有效的方式更改其容量的情況下快速清空向量?
我到目前為止使用的是
std::vector<int> myVec;
for(int i=0; i<A_BIG_NUMBER; ++i) {
std::vector<T>().swap(myVec);
myVec.reserve(STANDARD_MAXIMUM);
/// .. doing business
}
干杯!
解:
感謝您的回答,這是我實施(檢查)的方式:
#include <vector>
#include <iostream>
int main() {
int n = 10;
std::vector< int > myVec;
myVec.reserve(n);
for(int j=0; j<3; ++j) {
myVec.clear();
for(int i=0; i<n; ++i) {
myVec.push_back(i);
}
for(int i=0; i<myVec.size(); ++i) {
std::cout << i << ": " << myVec[i] << std::endl;
}
}
return 0;
}
編輯:從operator[]
更改為push_back
。
使用vector::clear
方法。 它將清除內容而不會降低其容量。
myVec.clear();
這等效於myVec.erase(myVec.begin(), myVec.end())
。
使用清除方法如下:
std::vector<int> myVec;
for(int i=0; i<A_BIG_NUMBER; ++i)
{
std::vector<T>().swap(myVec);
myVec.reserve(STANDARD_MAXIMUM);
/// .. doing business
myVec.clear();
}
根據OP解決方案的答案:
容器的通常方法是從一個空容器開始,並根據需要填充它,但std :: vector例外,盡管容器中仍然沒有對象,但您仍可以保留空間。
如果您想使用另一種方法,其中“空容器”將是您可以像數組一樣訪問的默認對象的容器(僅適用於std :: vector和std :: deque),那么您需要從resize()開始您可以用填充“清理”:
int n = 10;
std::vector<int> myVec;
myVec.resize(n);
myVec[4] = 5;
std::cout << myVec[4] << "\n";
std::fill(myVec.begin(), myVec.end(), int()); // ofcourse for int, you can use 0 instead of int()
std::cout << myVec[4] << "\n";
要保留向量的當前大小以及其內容的默認值,可以為向量指定默認值。 如果是整數向量,則可以執行以下操作:
myVec.assign( myVec.size(), 0 );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.