vector容器(下)

五、vector的插入和删除

1、功能描述:对vector容器进行插入、删除操作;

2、函数原型:

(1)push_back(ele); //尾部插入元素ele

(2)pop_back(ele);  //删除最后一个元素

(3)insert(const_iterator ops,ele); //迭代器指向位置pos插入元素ele

(4)insert(const_iterator pos,int count,ele); //迭代器指向位置pos插入count个元素ele

(5)erase(const_iterator pos); //删除迭代器指向的元素

(6)erase(const_iterator start,const_iterator end);//删除迭代器从start到end之间的元素

(7)clear(); //删除容器中所有元素

3、代码

 1 #include <iostream>
 2 #include <vector>
 3 using namespace std;
 4 void printVector(vector<int>& v)
 5 {
 6     for (vector<int>::iterator it = v.begin(); it != v.end(); ++it)
 7     {
 8         cout << *it << " ";
 9     }
10     cout << endl;
11 }
12 void test01()
13 {
14     vector<int> v1;
15     v1.push_back(10);
16     v1.push_back(20);
17     v1.push_back(30);
18     v1.push_back(40);
19     v1.push_back(50);
20     printVector(v1);
21     v1.pop_back();     //尾删
22     printVector(v1);
23 
24     v1.insert(v1.begin(),100);   //插入
25     printVector(v1);
26 
27     v1.insert(v1.begin(), 2, 1000);
28     printVector(v1);
29 
30     v1.erase(v1.begin());
31     printVector(v1);
32 
33     v1.erase(v1.begin(), v1.end());
34     v1.clear();
35     printVector(v1);
36     
37 }
38 int main()
39 {
40     test01();
41     return 0;
42 }

运行结果:

 六、vector数据存取

1、功能描述:对vector中的数据的存取操作

2、函数原型:

(1)at(int dex);//返回索引idx所指的数据

(2)operaotr[];  //返回索引idx所指的数据

(3)front();  //返回容器中第一个数据元素

(4)back();  //返回容器中最后一个数据元素

3、代码

 1 #include <iostream>
 2 using namespace std;
 3 #include <vector>
 4 void printVector(vector<int>& v)
 5 {
 6     for (vector<int>::iterator it = v.begin(); it != v.end(); ++it)
 7     {
 8         cout << *it << " ";
 9     }
10     cout << endl;
11 }
12 void test01()
13 {
14     vector<int>v1;
15     for (int i = 0; i < 10; i++)
16     {
17         v1.push_back(i);
18     }
19     for (int i = 0; i < v1.size(); i++)
20     {
21         cout << v1[i] << " ";
22     }
23     cout << endl;
24     cout << "v1的第一个元素为:" << v1.front() << endl;
25     cout << "v1的最后一个元素为:" << v1.back() << endl;
26 }
27 int main()
28 {
29     test01();
30     return 0;
31 }

运行结果:

 七、vector互换容器

1、功能描述:实现两个容器内元素进行交换

2、函数原型:swap(vec); //将vec与本身的元素交换

3、代码

 1 #include <iostream>
 2 using namespace std;
 3 #include <vector>
 4 void printVector(vector<int>& v)
 5 {
 6     for (vector<int>::iterator it = v.begin(); it != v.end(); ++it)
 7     {
 8         cout << *it << " ";
 9     }
10     cout << endl;
11 }
12 void test01()
13 {
14     vector<int>v1;
15     for (int i = 0; i < 10; i++)
16     {
17         v1.push_back(i);
18     }
19     cout << "v1的元素为:" << endl;
20     printVector(v1);
21     vector<int>v2;
22     for (int i = 9; i >= 0; i--)
23     {
24         v2.push_back(i);
25     }
26     cout << "v2的元素为:" << endl;
27     printVector(v2);
28 
29     v1.swap(v2);    //执行交换操作,将v1和v2容器中的元素进行交换
30     
31     cout << "交换后v1的元素为:" << endl;
32     printVector(v1);
33     cout << "交换后v2的元素为:" << endl;
34     printVector(v2);
35 }
36 int main()
37 {
38     test01();
39     return 0;
40 }

运行结果:

 八、vector预留空间

1、功能描述:减少vector在动态扩展容量时的扩展次数

2、函数原型:reserve(int len); //容器预留len个元素长度,预留位置不初始化,元素不可访问

3、代码

(1)不进行预留空间的操作

 1 #include <iostream>
 2 using namespace std;
 3 #include <vector>
 4 void test01()
 5 {
 6     vector<int>v;
 7     /*v.reserve(100000);*/        //执行空间预留的操作
 8     int num = 0;
 9     int* p = NULL;
10     for (int i = 0; i < 100000; i++)
11     {
12         v.push_back(i);
13         if (p != &v[0])
14         {
15             p = &v[0];
16             num++;
17         }
18     }
19     cout << "num=" << num << endl;
20 }
21 int main()
22 {
23     test01();
24     return 0;
25 }

运行结果:

 (2)执行预留空间的操作

 1 #include <iostream>
 2 using namespace std;
 3 #include <vector>
 4 void test01()
 5 {
 6     vector<int>v;
 7     v.reserve(100000);        //执行空间预留的操作
 8     int num = 0;
 9     int* p = NULL;
10     for (int i = 0; i < 100000; i++)
11     {
12         v.push_back(i);
13         if (p != &v[0])
14         {
15             p = &v[0];
16             num++;
17         }
18     }
19     cout << "num=" << num << endl;
20 }
21 int main()
22 {
23     test01();
24     return 0;
25 }

运行结果:

 

(3)对比

不进行预留空间的操作-------------开辟空间的次数num=30;

进行预留空间的操作----------------开辟空间的次数num=1;

二者相比较,执行预留空间操作后,内存开辟的次数减少,从而可以节省运行时间,提高效率;

(4)总结:如果数据量较大,可以一开始利用reserve预留空间;

posted @ 2023-05-10 19:24  连师傅只会helloword  阅读(3)  评论(0编辑  收藏  举报