STL 小白学习 vector
Posted likeghee
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STL 小白学习 vector相关的知识,希望对你有一定的参考价值。
1 #include <iostream> 2 using namespace std; 3 #include <vector> 4 5 void printVector(vector<int>& v) { 6 for (vector<int>::iterator it = v.begin(); it != v.end(); it++) { 7 cout << (*it) << " "; 8 } 9 cout << endl; 10 } 11 //初始化 12 void test01() { 13 14 vector<int> v1;//默认构造 初始化 15 //用数组进行初始化 16 int arr[] = { 10,30,45,65 }; 17 vector<int> v2(arr, arr + sizeof(arr) / sizeof(int)); 18 //用迭代器进行初始化 19 vector<int>v3(v2.begin(), v2.end()); 20 //,,, 21 vector<int>v4(v3); 22 23 //遍历 24 printVector(v2); 25 printVector(v3); 26 printVector(v4); 27 28 } 29 30 //常用赋值操作 31 void test02() { 32 vector<int> v = { 45,4,54,56,10 }; 33 printVector(v); 34 vector<int> v2; 35 v2.assign(v.begin(), v.end()); //.assign()成员函数赋值 36 printVector(v2); 37 vector<int> v3; 38 v3 = v2;//等号重载 赋值 39 printVector(v3); 40 vector<int> _v = { 123,123,323,44,20 }; 41 _v.swap(v);//将_v与v数据交换 42 printVector(_v); 43 printVector(v); 44 } 45 46 //大小操作 47 //.size() .resize() .capacity() 48 void test03() { 49 vector<int> v1 = { 120,540,4,54,89 }; 50 51 cout << "size :" << v1.size() << endl;//.size()访问元素个数 52 53 if (v1.empty()) {//.empty()判断对象是否为空 空返回真 54 cout << "v1为空" << endl; 55 } 56 else { 57 cout << "v1不为空" << endl; 58 } 59 //修改容器大小.resize() 60 printVector(v1); 61 v1.resize(2);//修改容器大小为2 62 printVector(v1);//超出范围的元素被删除 63 v1.resize(6);//修改容器大小为6 原有元素个数<修改后的个数 默认添加0 64 printVector(v1); 65 v1.resize(9,1);//修改容器大小为9 原有元素个数<修改后的个数 将默认添加0改为1 66 printVector(v1); 67 68 cout <<"容量 : " <<v1.capacity() << endl;//.capacity()显示容量 69 70 //size可以不等于capacity 71 for (int i = 0; i < 100000; i++) { 72 v1.push_back(1); 73 } 74 cout << "size : " << v1.size() << endl;//显示容器大小 75 cout << "容量 : " << v1.capacity() << endl;//显示容量 76 //size不等于capacity 77 78 } 79 80 //vector 存取数据 .at() 81 void test04() { 82 vector<int> v1 = { 156,4,4,5641,654,684 }; 83 84 //[]重载 存取数据 85 for (int i = 0; i < v1.size(); i++) { 86 cout << v1[i] << " "; 87 } 88 cout << endl; 89 90 //成员函数.at() 存取数据 91 for (int i = 0; i < v1.size(); i++) { 92 cout << v1.at(i) << " "; 93 } 94 cout << endl; 95 96 //区别 at()会抛出异常 97 try { 98 cout << v1.at(100); 99 } 100 catch (...) { 101 cout << "接到异常!" << endl; 102 } 103 104 } 105 //数据存储操作 .front() .back() 106 void test05() { 107 vector<int> v1 = { 156,4,4,5641,654,684 }; 108 cout << "v1的第一个元素为:" << v1.front() << endl; //返回第一个元素值 109 cout << "v1的最后一个元素为:" << v1.back() << endl;//返回最后一个元素值 110 } 111 112 //插入删除 .insert() .push_back() .pop_back() .clear() 113 void test06(){ 114 vector<int> v1 = { 156,4,4,5641,654,684 }; 115 //尾部添加 545 116 v1.push_back(545); 117 v1.push_back(1);//尾部添加 1 118 //尾部删除 119 v1.pop_back(); 120 //在头部插入30 121 v1.insert(v1.begin(), 30); 122 //在尾部部插入30 123 v1.insert(v1.end(), 30); 124 //将30插入到v1[5]的位置 125 v1.insert(v1.begin() + 5, 30); 126 printVector(v1); 127 //vector 随即访问 128 //支持数组下标,一般支持随机访问 129 //迭代器可以直接进行 +1,+2,+3的操作 130 131 v1 = { 84,8948,94,8948,94,89,2323,489,48,94 }; 132 printVector(v1); 133 //删除第一个元素 134 v1.erase(v1.begin()); 135 printVector(v1); 136 //删除v1[5]元素 137 v1.erase(v1.begin()+5); 138 printVector(v1); 139 //删除最后一个元素 140 v1.erase(v1.end() -1); 141 printVector(v1); 142 //删除v1[2]到v1[3]的元素 143 v1.erase(v1.begin()+1, v1.begin() + 3); 144 printVector(v1); 145 //清除所有元素 146 v1.clear(); 147 printVector(v1); 148 } 149 //用swap收缩空间 150 void test07() { 151 vector<int> v; 152 for (int i = 0; i < 100000; i++) { 153 v.push_back(1); 154 } 155 cout << "size: " << v.size() << endl; 156 cout << "capacity: " << v.capacity() << endl; 157 158 v.resize(10); 159 cout << "size: " << v.size() << endl; 160 cout << "capacity: " << v.capacity() << endl; 161 162 //收缩capacity 163 //vector<int>(v) 用v初始化匿名对象* 164 //swap 交换指针指向 将v空间指向匿名对象的空间 165 //匿名对象析构 结束 166 vector<int>(v).swap(v); 167 cout << "size: " << v.size() << endl; 168 cout << "capacity: " << v.capacity() << endl; 169 } 170 171 //reserve 和 resize函数的区别 172 //reserve 预留空间 173 //resize 修改大小 174 void test08() { 175 int num = 0; 176 int* addr = NULL; 177 178 vector<int> v; 179 v.reserve(100000);//预留空间 减少拷贝次数 180 for (int i = 0; i < 10000; i++) { 181 v.push_back(i); 182 if (addr != &(v[0])) { //计算有多少次空间的申请与释放 183 addr = &(v[0]); 184 num++; 185 } 186 } 187 cout << "num:" << num<<endl; 188 } 189 190 191 int main() { 192 test08(); 193 }
以上是关于STL 小白学习 vector的主要内容,如果未能解决你的问题,请参考以下文章
小白学习C++ 教程二十一C++ 中的STL容器Arrays和vector