vector类的介绍:
vector的基本概念vector的构造函数vector的赋值操作vector的容量和大小vector的插入和删除vector的存取vector互换容器vector预留空间最近比较忙,文章的更新不是那么频繁!这个周末我给大家带来C++的STL中的vector容器的使用。说起STL,那可真是了不得,为何这么说呢?它提供了很多标准数据结构算法的实现,为项目的开发提供了标准的接口,一定程度上提升了开发的效率。当然,目前市场上也有很多大公司出于安全性考虑或者别的原因,通常不会使用STL,会定义自己STL。总之,无论你用不用STL,我们学习的是一种处理问题的思想,毕竟很多精华的形成需要日积月累,何况要成为一个程序员王者!!
废话不多说,开始今天的正题!!
vector和数据非常的类似,都属于单端数组,不过它和数组最大区别是可以动态的扩展内存空间,而数组在定义的时候已经分配了固定的内存空间,在之后操作中不可以动态的扩展。
什么是动态扩展?
当往容器中插入数据的时候,如果原先分配给容器的空间不足,系统会再找一块更大的内存空间,将原数据拷贝到新空间,并释放原空间。
目的:用来创建vector容器
#include<iostream> using namespace std; #include<string> void printVector(vector<int> &v){ for(vector<int>::iterator it = v.begin(); it != v.end(); it++){ cout << *it << " "; } cout << endl; } int main(){ // Method one vector<int> v1; for(int i = 0; i < 10; i++){ v1.push_back(i); } printVector(v1); // Method two vector<int> v2(v1.begin(),v1.end()); printVector(v2); // Method three vector<int> v3(10,100); printVector(v3); // Method four vector<int> v4(v3); printVector(v4); }目的:显而易见,给容器vector赋值呗!!
#include<iostream> using namespace std; #include<vector> void printVector(vector<int> &v){ for(vector<int>::iterator it=v.begin();it!=v.end();it++){ cout << *it << " "; } cout << endl; } void test(){ vector<int> v; for(int i = 0;i < 10; i++){ v.push_back(i); } printVector(v); // 赋值方法一 vector<int> v1; v1 = v; printVector(v1); // 赋值方法二 vector<int> v2; v2.assign(v1.begin(),v1.end()); printVector(v2); // 赋值方法三 vector<int> v3; v3.assign(10,100); printVector(v3); } int main(){ test(); }目的:对容器vector的容量和大小进行操作。
#include<iostream> using namespace std; #include<vector> void printVector(vector<int> &v){ for(vector<int>::iterator it=v.begin();it!=v.end();it++){ cout << *it << " "; } cout << endl; } void test(){ vector<int> v; for(int i = 0;i < 10; i++){ v.push_back(i); } printVector(v); cout << "容器vector v的容量为:" << v.capacity() << endl; cout << "容器vector v的大小为:" << v.size() << endl; // 重新指定容器的大小 v.resize(15); printVector(v);// 如果新的size比原始的size大,则用0填充,否则删除元素处理 // 重新指定容器的大小,并指定填充元素值(resize的重载版本) v.resize(15,100); printVector(v);// 如果新的size比原始的size大,则用100填充,否则删除元素处理 } int main(){ test(); }目的:显而易见!!
#include<iostream> using namespace std; #include<vector> void printVector(vector<int> &v){ for(vector<int>::iterator it=v.begin();it!=v.end();it++){ cout << *it << " "; } cout << endl; } void test(){ vector<int> v; for(int i = 0;i < 10; i++){ v.push_back(i); } printVector(v); // 尾删元素 v.pop_back(); printVector(v); // 插入元素,需要用迭代器指定插入位置 v.insert(v.begin(),100); printVector(v); // 插入元素,需要用迭代器指定插入位置,并指定插入元素的个数 v.insert(v.begin(),2,100); printVector(v); // 删除元素,并用迭代器指定要删除元素的位置 v.erase(v.begin()); printVector(v); // 用迭代器指定范围内元素删除 v.erase(v.begin(),v.end()); printVector(v); // 清空vector v.clear(); printVector(v); } int main(){ test(); }目的:显而易见!!
#include<iostream> using namespace std; #include<vector> void test(){ vector<int> v; for(int i = 0;i < 10; i++){ v.push_back(i); } // 第一种取法 for(int i=0;i<v.size();i++){ cout << v[i] << " "; } cout << endl; // 第二种取法 for(int i=0;i<v.size();i++){ cout << v.at(i) << " "; } cout << endl; cout << "The first element is :" << v.front() << endl; cout << "The last element is :" << v.back() << endl; } int main(){ test(); }目前:交换两个容器的值呗!!
#include<iostream> using namespace std; #include<vector> void test(){ // 通过swap 收缩内存空间 vector<int> v; for(int i = 0;i < 10000; i++){ v.push_back(i); } v.resize(3); cout << "v的capacity()是" << v.capacity() << endl; cout << "v的size是" << v.size() << endl; vector<int>(v).swap(v); cout << "v的capacity()是" << v.capacity() << endl; cout << "v的size是" << v.size() << endl; } int main(){ test(); }目的:减少容器动态扩展的次数。
#include<iostream> using namespace std; #include<vector> void test1(){ vector<int> v; int num = 0 int *p = NULL; for(int i = 0;i < 100000; i++){ v.push_back(i); if(p != &v[0]){ num += 1; p = &v[0] } } cout << "vector 动态扩展内存的次数为:" << num << endl; } int main(){ test1(); }
未定义预留空间运行效果:
#include<iostream> using namespace std; #include<vector> void test_reserve(){ // 通过swap 收缩内存空间 vector<int> v; v.reserve(100000); int num = 0 int *p = NULL; for(int i = 0;i < 100000; i++){ v.push_back(i); if(p != &v[0]){ num += 1; p = &v[0] } } cout << "vector 动态扩展内存的次数为:" << num << endl; } int main(){ test_reserve() }定义预留空间运行效果:
总结:如果数据量大的化,开始时候我们可以通过使用reserve来指定预留空间,减少扩展次数。
好了,所有关于STL容器vector的内容我已经书写完毕!如果上述内容有问题可以提出异议,谢谢阅读!!
