opencart做網(wǎng)站視頻國外域名購買
1. 容器的容量
容器的size是指它已經(jīng)保存的元素的數(shù)目;而capacity則是在不分配新的內(nèi)存空間的前提下它最多可以保存多少元素。capacity(),size(),reserve(),resize()這幾個都是不太容易區(qū)分的函數(shù)
function | mean |
---|---|
capacity() | 獲得容器在不新增內(nèi)存的情況下最多能存儲多少個 |
size() | 這個很簡單,就是獲得容器中現(xiàn)在存儲了幾個 |
reserve() | 指定容器能存儲幾個數(shù)據(jù) |
resize() | 顧名思義,重新指定size的大小 |
當(dāng)我們創(chuàng)建空容器時,容量(capacity)為0;容器的內(nèi)存空間用完時,增加為原容量的1/2;上述機制適用于元素連續(xù)存儲的容器,如vector ,而list則不同。
capacity 一般大于size的原因是為了避免每次增加數(shù)據(jù)時都要重新分配內(nèi)存,所以一般會生成一個較大的空間,以便隨后的數(shù)據(jù)插入。
2. c++實例
#include <iostream>
#include <vector>int main() {//此時沒有初始化,所以size()和capacity()都是0;std::vector<int> vec; std::cout << " size: " << vec.size() << std::endl << " capacity: " << vec.capacity() << endl;vec.push_back(1);//此時容器內(nèi)有一個元素了,那么size()和capacity()都是1std:cout << " size: " << vec.size() << std::endl<< " capacity: " << vec.capacity() << std::endl;vec.push_back(1);//此時容器內(nèi)能夠提供的空間capacity()不夠用,根據(jù)前面提到的二倍原則,申請后的大小應(yīng)該是以前的2倍,此時有兩個元素,size()為2,capacity()也是2std::cout << " size: " << vec.size() << std::endl<< " capacity: " << vec.capacity() << std::endl;vec.push_back(1);//此時容器能夠提供的空間是2,申請后的空間為原來2倍,就是4了,那么size()為3,capacity()為4std::cout << " size: " << vec.size() << std::endl<< "capacity: " << vec.capacity() << std::endl;vec.push_back(1);//容器還能夠提供一個空間,不需要申請新空間,size()為4,capacity()為4std::cout << " size: " << vec.size() << std::endl<< " capacity: " << vec.capacity() << std::endl; vec.push_back(1);//空間不夠,需要申請,size()為5,capacity為8std::cout << " size: " << vec.size() << std::endl << "capacity: " << vec.capacity() << std::endl;
}