c++ primer(第五版)筆記 第九章 順序容器(3)

// 容量管理
	// 將 capacity 減少到和 size() 相同
	// 用於 vector string deque
	// 不一定執行
	// c.shrink_to_fit()
	
	// 不重新分配內存的話,c 可以保存多少元素
	// 用於 vector string
	// c.capacity()
	
	// 分配至少能容納 n 個元素的空間
	// 用於 vector string
	// 不改變容器中元素的數量,僅影響預先分配多大的內存空間
	// 只有當需要的內存空間超過當前容量時,reserve 調用纔會改變容量,至少分配與需求一樣大的空間
	// 如果需求小於當前容量,容器不會退回內存空間
	// c.reserve(n)
	
// 適配器(adaptor),使某種事物的行爲看起來像另一種事物
		// 都支持的操作和類型
		// size_type	足以保存當前類型的最大對象的大小
		// value_type	元素類型
		// container_type	實現適配器底層容器類型
		// A a		創建一個空適配器
		// A a(c)		創建一個適配器,帶有容器 c 的一個拷貝
		// ==, !=, >, >=, <, <=
		// a.empty()	若 a 包含任何元素,返回 false, 否則返回 true
		// a.size()	返回 a 中元素數目
		// swap(a,b)
		// a.swap(b)	交換 a 和 b 的內容,必須相同的類型,包括底層容器類型也必須相同
		
	// stack	棧適配器,默認基於 deque 實現
		// 需要 push_back pop_back back 操作,可以用除 array,forward_list 外的其他容器構造
			// s.pop()			刪除棧頂元素,但不返回該值
			// s.top()			返回棧頂元素,但不將其彈出
			// s.push(t)		創建一個元素,壓入棧頂,該元素通過拷貝或移動 t 獲得,或由 args 構造
			// s.emplace(args)
		
	// queue 	隊列適配器,默認由 deque 實現,first-in,first-out (FIFO),隊尾插入,隊首刪除
		// 需要 push_back back push_front front,可用 list deque 構造,不能是vector
			// q.back() 	返回尾元素,但不刪除此元素
			
	// priority_queue	隊列適配器,,默認由 vector 實現,按優先級,將元素插入所有優先級低於他的元素之前
		// 需要 front push_back pop_back,以及隨機訪問能力,可以用 vector deque 構造,不能是 list
			// q.top()		返回最高優先級的元素,但不刪除此元素
			
			// 隊列通用
				// q.pop()			返回 queue 的首元素或 priority_queue 最高優先級的元素,但不刪除此元素
				// q.front()		返回首元素,但不刪除此元素
				// q.push(t)		創建一個元素,壓入棧頂,該元素通過拷貝或移動 t 獲得,或由 args 構造
				// q.emplace(args)	在 queue 末尾或 priority_queue 中恰當的位置創建一個元素,值爲 t,或由 args 構造
	
#include<vector>
#include<iostream>
#include<string>
#include<stack>
using std::vector;
using std::string;
using std::stack;
using std::endl;
using std::cout;
using std::cin;

int main()
{
	vector<int> vi{2,53,23};
	cout << "capacity:"<<vi.capacity() <<endl;
	cout << "size:"<<vi.size() <<endl;
	
	vi.pop_back();
	cout << "capacity:"<<vi.capacity() <<endl;
	cout << "size:"<<vi.size() <<endl;
	
	vector<string> vs;
	vs.reserve(5);
	cout << "before_capacity:"<<vs.capacity() <<endl;
	cout << "before_size:"<<vs.size() <<endl;
	
	string word;
	
	while (cin >> word)
		vs.push_back(word);
	vs.resize(vs.size() + vs.size() / 2);
	cout << "after_capacity:"<<vs.capacity() <<endl;
	cout << "after_size:"<<vs.size() <<endl;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章