1. 程式人生 > 其它 >C++進階-3-3deque容器

C++進階-3-3deque容器

C++進階-3-3deque容器

  1 #include<iostream>
  2 #include<deque>
  3 #include<algorithm>
  4 using namespace std;
  5 
  6 // deque 容器
  7 
  8 void printDeque(deque<int>& d) {
  9     for (deque<int>::iterator it = d.begin(); it != d.end(); it++) {
 10         cout << *it << "
"; 11 } 12 cout << endl; 13 14 } 15 16 // 1. 建構函式 17 void test01() { 18 19 deque<int> d1; 20 for (int i = 0; i < 10; i++) { 21 d1.push_back(i); 22 } 23 printDeque(d1); 24 25 deque<int> d2(d1.begin(), d1.end()); 26 printDeque(d2);
27 28 deque<int> d3(10, 100); 29 printDeque(d3); 30 31 deque<int> d4(d3); 32 printDeque(d4); 33 } 34 35 // 2.deque賦值操作 36 void test02() { 37 38 deque<int> d1; 39 for (int i = 0; i < 10; i++) { 40 d1.push_back(i); 41 } 42 printDeque(d1);
43 44 // operator= 賦值 45 deque<int>d2; 46 d2 = d1; 47 printDeque(d2); 48 49 // assign 賦值 50 deque<int> d3; 51 d3.assign(d1.begin(), d1.end()); 52 printDeque(d3); 53 54 deque<int> d4; 55 d4.assign(10, 100); 56 printDeque(d4); 57 58 } 59 60 // 3.deque大小操作 61 void test03() { 62 63 deque<int> d1; 64 for (int i = 0; i < 10; i++) { 65 d1.push_back(i); 66 } 67 printDeque(d1); 68 69 if (d1.empty()) { 70 cout << "d1為空!" << endl; 71 } 72 else { 73 cout << "d1不為空" << endl; 74 cout << "d1的大小為:" << endl; 75 // deque容器沒有容量概念 76 } 77 78 d1.resize(15); 79 printDeque(d1); 80 81 d1.resize(18, 4); 82 printDeque(d1); 83 84 d1.resize(5); 85 printDeque(d1); 86 } 87 88 // 4.deque插入和刪除 89 void test04() { 90 91 // 兩端操作 92 cout << "兩端操作:" << endl; 93 deque<int> d1; 94 95 // 尾插 96 d1.push_back(10); 97 d1.push_back(20); 98 // 頭插 99 d1.push_front(100); 100 d1.push_front(200); 101 102 printDeque(d1); 103 104 // 尾刪 105 d1.pop_back(); 106 printDeque(d1); 107 // 頭刪 108 d1.pop_front(); 109 printDeque(d1); 110 111 cout << endl; 112 113 114 // 指定位置操作 115 cout << "指定位置操作:" << endl; 116 deque<int>d2; 117 d2.push_back(10); 118 d2.push_back(20); 119 d2.push_back(30); 120 d2.push_back(40); 121 122 printDeque(d2); 123 124 // insert 插入 125 d2.insert(d2.begin(), 1000); 126 printDeque(d2); 127 128 d2.insert(d2.begin(), 2, 800); 129 printDeque(d2); 130 131 d2.insert(d2.begin(), d1.begin(),d1.end()); 132 printDeque(d2); 133 134 cout << endl; 135 136 // 刪除操作 137 cout << "刪除操作!" << endl; 138 deque<int>::iterator it = d2.begin(); 139 it++; 140 d2.erase(it); 141 printDeque(d2); 142 143 d1.erase(d1.begin(), d1.end()); 144 printDeque(d1); 145 146 d1.clear(); 147 printDeque(d1); 148 149 } 150 151 // 5.deque資料存取 152 void test05() { 153 154 deque<int>d; 155 d.push_back(10); 156 d.push_back(20); 157 d.push_back(30); 158 d.push_back(100); 159 d.push_back(200); 160 d.push_back(300); 161 162 // 通過 [] 訪問元素 163 for (int i = 0; i < d.size(); i++) { 164 cout << d[i] << " "; 165 } 166 cout << endl; 167 168 // 通過 at 訪問元素 169 for (int i = 0; i < d.size(); i++) { 170 cout << d.at(i) << " "; 171 } 172 cout << endl; 173 174 cout << "第一個元素為:" << d.front() << endl; 175 cout << "最後一個元素:" << d.back() << endl; 176 177 } 178 179 // deque排序 180 void test06() { 181 182 deque<int>d; 183 d.push_back(10); 184 d.push_back(20); 185 d.push_back(30); 186 d.push_front(100); 187 d.push_front(200); 188 d.push_front(300); 189 190 printDeque(d); 191 192 // 排序 預設排序規則:從小到大,升序 193 // 對於支援隨機訪問的迭代器的容器,都可以利用sort演算法直接對其進行排序; 194 sort(d.begin(), d.end()); 195 cout << "排序後:" << endl; 196 printDeque(d); 197 198 } 199 200 int main() { 201 202 // 1. 建構函式 203 //test01(); 204 205 // 2. 賦值操作 206 //test02(); 207 208 // 3.大小操作 209 //test03(); 210 211 // 4.插入和刪除 212 //test04(); 213 214 // 5.資料存取 215 //test05(); 216 217 // 6.deque排序 218 test06(); 219 220 system("pause"); 221 222 return 0; 223 } 224 225 // 總結 226 // 227 // deque 容器 228 // 229 // 功能 :雙端陣列,可以對頭端進行插入刪除操作 230 // 231 // deque與vector區別: 232 // vector對於頭部的插入刪除效率低,資料量越大,效率越低 233 // deque相對而言,對頭部的插入刪除速度會比vector快 234 // vector訪問元素時的速度會比deque快,這和兩者內部實現有關 235 // 236 // deque內部有個中控器,維護每段緩衝區中的內容,緩衝區中存放真實資料 237 // 中控器維護的是每個緩衝區的地址,是的使用deque時像是一片連續的記憶體空間 238 // 239 // deque容器的迭代器也是支援 隨機訪問 的 240 //