#include <iostream>
#include <string>
#include <deque>
// https://zh.cppreference.com/w/cpp/container/deque
// vector 和 deque 的差別
// https://www.cnblogs.com/zhuyf87/archive/2012/12/09/2809896.html
using namespace std;
int main()
{
int a[] = { 1,2,3 };
deque<int> deq = {1,2,3};
//////////////////////////////////////////////////////////////////////////
deq.assign(4, 5); // 5 5 5 5
deque<int> deq1 = deq; // deep copy
deq1[0] = 10;
deq1.at(0) = 25;
int vhead = deq1.front();
int vtail = deq1.back();
//////////////////////////////////////////////////////////////////////////
// 迭代器
for (auto it = deq1.begin(); it != deq1.end(); ++it)
{
std::cout << *it << " ";
}
std::cout << std::endl; // 25 2 3
for (auto it = deq1.cbegin(); it != deq1.cend(); ++it)
{
std::cout << *it << " ";
}
std::cout << std::endl; // 25 2 3
for (auto it = deq1.rbegin(); it != deq1.rend(); ++it)
{
std::cout << *it << " ";
}
std::cout << std::endl; // 3 2 25
//////////////////////////////////////////////////////////////////////////
bool isEmpty = deq1.empty();
size_t size = deq1.size();
size_t mSzie = deq1.max_size();
deq1.clear();
deq1.shrink_to_fit();
deq1.insert(deq1.begin(), 6);
deq1.emplace(deq1.begin(), 7);
deq1.insert(deq1.begin(), 2, 55);
deque<int> deqtt = {11,22,33};
deq1.insert(deq1.begin(), deqtt.begin(), deqtt.end()); // 11 22 33 55 55 7 6
deq1.insert(deq1.begin(), {999, 888}); // 999 888 11 22 33 55 55 7 6
deq1.push_back(88);
deq1.emplace_back(99);
deq1.push_front(100);
deq1.emplace_front(110);
deq1.erase(deq1.begin());
deq1.erase(deq1.begin(), deq1.end());
deq1.swap(deqtt); // 交換的 size 大小不必一樣
//////////////////////////////////////////////////////////////////////////
// resize 以及初始化值什么時候起作用
deq1.clear();
deq1.resize(2); // 0 0
deq1.resize(2, 4); // 0 0 其中的 4 還不起作用。
deq1.clear();
deq1.resize(2, 4); // 4 4
deq1.resize(2); // 4 4 沒有改變 size,見下面的說明
deq1.clear();
deq1.resize(2); // 0 0
deq1.resize(3, 4); // 0 0 4 當 size 要改變時,4 時新值的初始值!原來的空間時不會刪除的,也不改變。
deq1.clear();
deq1.resize(2, 4); // 4 4
deq1.resize(3); // 4 4 0 默認的 int 初始值為 0
return 0;
}