C++黑马程序员——P197-200. vector容器 构造函数,赋值,容量和大小,插入和删除

发布时间 2023-04-20 20:48:56作者: 我会变强的
  • P197. vector容器——构造函数
  • P198. vector容器——赋值操作
  • P199. vector容器——容量和大小
  • P200. vector容器——插入和删除
  • P197. vector容器 构造函数

vector基本概念

  功能:vector数据结构和数组非常相似,也称为单端数组

  vector与普通数组区别:不同之处在于数组是静态空间,而vector可以动态扩展

  动态扩展:并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间

  

  vector容器的迭代器是支持随机访问(跳跃的访问)的迭代器

 

  

(第二三四中方式,上面没给全,应该是 vector<数据类型>变量名(参数),参考一下下面的代码部分)

 1 #include <iostream>
 2 #include <vector>
 3 using namespace std;
 4 
 5 //打印函数
 6 void PrintVector(vector<int>&v)  //引用传递
 7 {
 8     for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
 9     {
10         cout << *it << " ";
11     }
12     cout << endl;
13 }
14 //vector容器 构造函数
15 void test01()
16 {
17     //1. 默认构造 无参构造
18     vector<int>v;
19     for (int i = 0; i < 10; i++)
20     {
21         v.push_back(i);
22     }
23     PrintVector(v);
24 
25     //2. 通过区间方式进行构造
26     vector<int>v2(v.begin(), v.end());
27     PrintVector(v2);
28 
29     //3. n个elem方式构造
30     vector<int>v3(10, 100); //10个100
31     PrintVector(v3);
32 
33     //4. 拷贝构造
34     vector<int>v4(v3);
35     PrintVector(v4);
36 }
37 
38 int main() {
39     
40     test01();
41     return 0;
42 }

运行结果:

  

 

  • P198. vector容器 赋值操作

  

上面第一条,重载等号操作符,C++已经重载好了,直接用“=”就可以

第二条,注意区间的前闭后开

示例:

 1 #include <iostream>
 2 #include <vector>
 3 using namespace std;
 4 
 5 //打印vector的函数
 6 void PrintVector(vector<int>& v)
 7 {
 8     for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
 9     {
10         cout << *it << " ";
11     }
12     cout << endl;
13 }
14 
15 //vector赋值
16 void test01()
17 {
18     vector<int>v1;
19     //把0-9装到v1
20     for (int i = 0; i < 10; i++)
21     {
22         v1.push_back(i);
23     }
24     PrintVector(v1);
25 
26     //赋值1. operator = 
27     vector<int>v2;
28     v2 = v1;
29     PrintVector(v2);
30 
31     //赋值2. assign
32     vector<int>v3;
33  v3.assign(v1.begin(), v1.end());
34     PrintVector(v3);
35 
36     //赋值3. n个elem的方式
37     vector<int>v4;
38     v4.assign(10, 100); //10个100
39     PrintVector(v4);
40 }
41 
42 int main() 
43 {    
44     test01();
45     return 0;
46 }

运行结果:

  

 

  • P199. vector容器 容量和大小

  

注意,上面的capacity()输出的不是当前容器的字节数,而是能够容纳多少<>里的东西;size()返回的则就是容器当前已经容纳了多少元素

 1 #include <iostream>
 2 #include <vector>
 3 using namespace std;
 4 
 5 //打印vector的函数
 6 void PrintVector(vector<int>& v)
 7 {
 8     for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
 9     {
10         cout << *it << " ";
11     }
12     cout << endl;
13 }
14 
15 //vector容器 容量和大小
16 void test01()
17 {
18     vector<int>v1;
19     for (int i = 0; i < 10; i++)
20     {
21         v1.push_back(i);
22     }
23     PrintVector(v1);
24 
25     if (v1.empty()) //empty()返回值为bool值,如果返回true代表v1为空,如果返回false代表v1非空
26     {
27         cout << "v1为空" << endl;
28     }
29     else
30     {
31         cout << "v1非空" << endl;
32         cout << "v1的容量为:" << v1.capacity() << endl;
33         cout << "v1的大小为:" << v1.size() << endl;
34     }
35 
36     //重新指定大小
37     v1.resize(15);
38     PrintVector(v1);    //如果重新指定的比原来长了,默认用0填充新的位置
39     v1.resize(16, 100); //利用重载的版本,可以修改默认的填充值(参数2,这里改为100)
40     PrintVector(v1);
41     v1.resize(5);   //如果重新指定的比原来短了,超出部分会删除掉
42     PrintVector(v1);
43 
44     cout << "v1的容量为:" << v1.capacity() << endl;
45     cout << "v1的大小为:" << v1.size() << endl;
46 }
47 
48 int main() 
49 {    
50     test01();
51     return 0;
52 }

运行结果:

  

第一次打印的“v1的容量为:13”,而我们只往vector中填充了10个int,多出来的3个是编辑器帮我们预留的;后面的“19”也是一样的道理。

  

 

  • P200. vector容器 插入和删除

  

 

  

 1 #include <iostream>
 2 #include <vector>
 3 using namespace std;
 4 
 5 //打印vector的函数
 6 void PrintVector(vector<int>& v)
 7 {
 8     for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
 9     {
10         cout << *it << " ";
11     }
12     cout << endl;
13 }
14 
15 //vector容器 插入和删除
16 void test01()
17 {
18     vector<int>v1;
19     //尾插
20     v1.push_back(10);
21     v1.push_back(20);
22     v1.push_back(30);
23     v1.push_back(40);
24     v1.push_back(50);
25     //遍历
26     PrintVector(v1);
27     //尾删
28  v1.pop_back();
29     PrintVector(v1);
30     //插入
31     v1.insert(v1.begin(), 100); //第一个参数是迭代器
32     PrintVector(v1);
33     v1.insert(v1.begin(), 2, 1000);
34     PrintVector(v1);
35     //删除
36  v1.erase(v1.begin());
37     PrintVector(v1);
38     //清空
39     //v1.erase(v1.begin(), v1.end());
40  v1.clear();
41     PrintVector(v1);    //只输出了一个换行
42 
43 }
44 
45 int main() 
46 {    
47     test01();
48     return 0;
49 }

运行结果:

  

 

  

(〃>_<;〃)(〃>_<;〃)(〃>_<;〃)