C++ //vector 容器构造 vector赋值操作 vector 容量大小 vector插入和删除 //vector数据存取 vector互换容器 vector预留空间

  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 }

 

posted on 2021-08-14 11:53  Bytezero!  阅读(89)  评论(0编辑  收藏  举报