溫馨提示×

c++ vector的容量如何管理

c++
小樊
83
2024-09-16 16:28:21
欄目: 編程語言

C++中的std::vector是一個動態(tài)數(shù)組,它可以根據(jù)需要自動調(diào)整大小

  1. 容量(Capacity)std::vector預(yù)先分配的內(nèi)存空間,用于存儲元素。當(dāng)你向vector添加元素時,如果當(dāng)前容量不足以容納新元素,vector會自動增加其容量。
  2. 大?。⊿ize)std::vector中當(dāng)前存儲的元素數(shù)量。

std::vector提供了幾個函數(shù)來管理容量:

  • size():返回vector中當(dāng)前存儲的元素數(shù)量。
  • capacity():返回vector當(dāng)前的容量。
  • reserve(size_t n):為vector預(yù)留至少n個元素的內(nèi)存空間。如果n大于當(dāng)前容量,vector會重新分配內(nèi)存以滿足請求。這可以減少在添加大量元素時多次重新分配內(nèi)存的開銷。
  • shrink_to_fit():請求vector減少其容量以與其大小相匹配。這可以釋放未使用的內(nèi)存空間。注意,實際效果取決于具體實現(xiàn),因為標(biāo)準(zhǔn)庫可能不會立即釋放內(nèi)存。

下面是一個示例,展示了如何使用這些函數(shù):

#include<iostream>
#include<vector>

int main() {
    std::vector<int> vec;

    // 添加元素,觀察容量變化
    for (int i = 0; i < 10; ++i) {
        vec.push_back(i);
        std::cout << "Size: "<< vec.size() << ", Capacity: "<< vec.capacity()<< std::endl;
    }

    // 預(yù)留容量
    vec.reserve(20);
    std::cout << "After reserve: Size: "<< vec.size() << ", Capacity: "<< vec.capacity()<< std::endl;

    // 縮小容量以匹配大小
    vec.shrink_to_fit();
    std::cout << "After shrink_to_fit: Size: "<< vec.size() << ", Capacity: "<< vec.capacity()<< std::endl;

    return 0;
}

請注意,std::vector的具體實現(xiàn)可能因庫和編譯器而異。因此,在實際應(yīng)用中,你可能會觀察到不同的容量增長策略。

0