簡體   English   中英

清空std :: vector而不更改其大小

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

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