1 //vector 容器构造 vector赋值操作 vector 容量大小 vector插入和删除 2 //vector数据存取 vector互换容器 vector预留空间 3 #include<iostream> 4 #include<string> 5 #include<vector> 6 7 using namespace std; 8 9 //打印 10 void printVector(vector<int> &v) 11 { 12 for (vector<int>::iterator it = v.begin(); it != v.end(); it++) 13 { 14 cout << *it << " "; 15 } 16 cout << endl; 17 } 18 //vector 容器构造 19 void test01() 20 { 21 vector<int>v1; //默认构造 无参构造 22 for (int i = 0; i < 10; i++) 23 { 24 v1.push_back(i); 25 } 26 27 printVector(v1); 28 29 //通过区间的方式进行构造 30 31 vector<int>v2(v1.begin(), v1.end()); 32 printVector(v2); 33 34 //N个elem方式构造 35 vector<int>v3(10, 100); 36 printVector(v3); 37 38 39 //拷贝构造 40 vector<int>v4(v3); 41 printVector(v4); 42 43 } 44 //打印 45 void printVector1(vector<int>&v1) 46 { 47 for (vector < int>::iterator it = v1.begin(); it != v1.end();it++) 48 { 49 cout << *it << " "; 50 } 51 cout << endl; 52 } 53 54 //vector 赋值 55 void test02() 56 { 57 vector<int>v1; 58 for (int i = 0; i < 10; i++) 59 { 60 v1.push_back(i); 61 } 62 printVector1(v1); 63 //赋值 operator= 64 vector<int>v2; 65 v2 = v1; 66 printVector1(v2); 67 68 //assign 69 vector<int>v3; 70 v3.assign(v2.begin(), v2.end()); 71 printVector(v3); 72 73 //n个elem 方式赋值 74 vector<int>v4; 75 v4.assign(10, 100); 76 printVector(v4); 77 78 } 79 80 //打印 81 void printVector3(vector<int>& v3) 82 { 83 for (vector<int>::iterator it = v3.begin(); it != v3.end(); it++) 84 { 85 cout << *it << " "; 86 } 87 cout << endl; 88 } 89 90 //vector 容量大小 91 void test03() 92 { 93 vector<int>v3; 94 for (int i = 0; i < 10; i++) 95 { 96 v3.push_back(i); 97 } 98 printVector3(v3); 99 100 if (v3.empty()) //为真 代表容器为空 101 { 102 cout << "v3为空!" << endl; 103 } 104 else 105 { 106 cout << "V3不为空!" << endl; 107 cout << "v3的容量为: " << v3.capacity() << endl; 108 cout << "v3的大小为:" << v3.size() << endl; 109 110 } 111 //重新指定大小 112 v3.resize(15,10);//利用重载的版本 可以指定默认填充的值,参数2 113 printVector3(v3); //如果重新指定的过长 默认用0填充新的位置 114 115 116 v3.resize(5); 117 printVector3(v3); //如果重新指定的过短,就会删除超出的部分 118 119 } 120 121 122 //打印 123 void printVector4(vector<int>& v4) 124 { 125 for (vector<int>::iterator it = v4.begin(); it != v4.end(); it++) 126 { 127 cout << *it << " "; 128 } 129 cout << endl; 130 } 131 132 //vector 插入和删除 133 void test04() 134 { 135 vector <int>v4; 136 //尾插 137 v4.push_back(10); 138 v4.push_back(20); 139 v4.push_back(30); 140 v4.push_back(40); 141 v4.push_back(50); 142 143 //遍历 144 printVector4(v4); 145 146 //尾删 147 v4.pop_back(); 148 printVector4(v4); 149 150 //插入第一个 第一个参数就是迭代器 151 v4.insert(v4.begin(), 100); 152 printVector4(v4); 153 154 //插入两个 55 在开头 155 v4.insert(v4.begin(), 2, 55); 156 printVector4(v4); 157 158 //删除 开头删除了第一个 参数 迭代器 159 v4.erase(v4.begin()); 160 printVector4(v4); 161 162 //删除 区间方式 类似 清空 163 //v4.erase(v4.begin(), v4.end()); // 全部删除 164 //printVector4(v4); 165 166 //清空 167 v4.clear(); 168 printVector4(v4); 169 } 170 171 172 //vector数据存取 173 void test05() 174 { 175 vector<int>v5; 176 for (int i = 0; i < 10; i++) 177 { 178 v5.push_back(i); 179 } 180 181 //利用[]的方式访问数组中的元素 182 for (int i = 0; i < v5.size(); i++) 183 { 184 cout << v5[i] << " "; 185 } 186 cout << endl; 187 188 //利用at方式访问元素 189 for (int i = 0; i < v5.size(); i++) 190 { 191 cout << v5.at(i) << " " ; 192 } 193 cout << endl; 194 195 //返回第一个元素 196 cout << "第一个元素为:" << v5.front() << endl; 197 198 //获取最后一个元素 199 cout << "最后一个元素为:" << v5.back() << endl; 200 } 201 202 203 //打印 204 void printVector6(vector<int>& v6) 205 { 206 for (vector<int>::iterator it = v6.begin(); it != v6.end(); it++) 207 { 208 cout << *it << " "; 209 } 210 cout << endl; 211 } 212 213 //vector互换容器 214 //1.基本使用 215 void test06() 216 { 217 vector<int>v6; 218 for (int i = 0; i < 10; i++) 219 { 220 v6.push_back(i); 221 } 222 cout << "交换前打印!!!" << endl; 223 printVector6(v6); 224 225 vector<int>v7; 226 227 for (int i = 10; i > 0; i--) 228 { 229 v7.push_back(i); 230 } 231 printVector6(v7); 232 233 234 cout << "交换后:!!!!!!!!!!" << endl; 235 236 v6.swap(v7); 237 printVector6(v6); 238 printVector6(v7); 239 240 } 241 242 //2.实际用途 243 //巧用swap可以收缩内存空间 244 void test07() 245 { 246 vector<int>v; 247 for (int i = 0; i < 100000; i++) 248 { 249 v.push_back(i); 250 } 251 252 cout << "第一次v的容量为:" << v.capacity() << endl; 253 cout << "第一次v的大小:" << v.size() << endl; 254 255 256 v.resize(3); //重新指定大小 257 cout << "第二次v的容量为:" << v.capacity() << endl; 258 cout << "第二次v的大小:" << v.size() << endl; 259 260 //巧用swap收缩内存 // vector<int>(v) 匿名对象执行完就被系统回收 261 vector<int>(v).swap(v); 262 263 cout << "第三次v的容量为:" << v.capacity() << endl; 264 cout << "第三次v的大小:" << v.size() << endl; 265 } 266 267 268 //预留空间 reserve(int len); 269 void test08() 270 { 271 vector<int>v8; 272 //利用reserve预留空间 273 v8.reserve(100000); 274 275 int num = 0; //统计开辟次数 276 int* p = NULL; 277 for (int i = 0; i < 10000; i++) 278 { 279 v8.push_back(i); 280 281 if (p != &v8[0]) 282 { 283 p = &v8[0]; 284 num++; 285 } 286 } 287 cout << "num = " << num << endl; 288 } 289 290 291 int main() 292 { 293 test01(); 294 295 test02(); 296 297 test03(); 298 299 test04(); 300 301 test05(); 302 303 304 test06(); 305 test07(); 306 307 test08(); 308 309 system("pause"); 310 return 0; 311 }