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