1. 程式人生 > >STL基礎--容器deque

STL基礎--容器deque

deque與vector類似,能夠進行隨機查詢

  • deque與vector的差異
  1. vector只能夠在尾部快速地進行插入、刪除操作;而deque能夠在前後兩端進行快速插入、刪除操作
  2. 訪問元素時,deque內部結構會多一個間接過程,所以元素的訪問和迭代器的移動會比vector稍慢一些
  3. 在記憶體塊大小有限制的系統中,deque可以包含更多元素,因為他使用不止一塊記憶體
  4. deque不支援對容量和記憶體重新分配時機的控制
  5. deque會釋放不再使用的記憶體區塊

 

  1. 在中部插入或移除元素較慢,因為所有元素需要移動以騰出或填補空間
  2. 迭代器屬於random-access iterator

 

  • 需要選擇使用deque的場景
  1. 需要在兩端安插、移除元素
  2. 無須指向容器內的元素
  3. 不再使用的元素必須釋放

根據deque與vector的區別我們猜測一下:vector儲存元素時使用的是一段連續的記憶體,而deque使用的可能是多段記憶體,然後使其組合在一起達到模擬成一段連續的記憶體。下面我們做一些列印來驗證一下這個猜測:

int main()
{
	deque<int> dq;
	for (int i = 0; i < 100; ++i)
	{
		dq.push_back(i);
	}
	for (size_t i = 0; i < dq.size(); ++i)
	{
		if (i % 5 == 0)
		{
			cout << endl;
		}
		cout << &dq[i] << ",  ";
	}
	system("pause");
	return 0;
}

輸出:

明顯這些地方都出現了記憶體跳動,所以猜測成立

  • 構造方法
deque