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预留空间;