目录
一、vector基本概念
功能
vevtor与普通数组的区别:
动态拓展:
二、vector构造函数
功能描述
函数原型
三、Vector赋值操作
功能描述
函数原型
四、Vector容量和大小
功能描述:
函数原型
五、vector插入和删除
功能描述
函数原型
六、vector数据存取
功能描述
函数原型
七、vector互换容器
功能描述
函数原型
八、预留空间
功能描述
函数原型
一、vector基本概念
功能
vector数据结构和数组非常相似,也称单端数组
vevtor与普通数组的区别:
不同之处是于数组是静态空间,而vector是动态拓展、
动态拓展:
并不是在原有空间之后续集新的空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间
这个容器前端是封闭的,通常不会在前端进行操作,可以在尾部通过push_back()插入数据,通过pop_back()
front()代表第一个元素 v.begin()代表第一个元素的位置
v.end() 代表最后一个元素的下一个位置 v.rbegin()代表最后一个元素的位置
back()代表最后一个元素 v.rend()代表第一个元素的前一个位置
二、vector构造函数
功能描述
创建vector容器
函数原型
vector<T> v; // 采用模板实现类实现,默认构造函数。 vector(v.begin() ,v.end()); //将v[begin(),end())区间的元素拷贝本身(前闭后开) vector(n,elem); //构造函数将n个elem拷贝给本身。 vector(const vector &vec) //拷贝构造函数。
例子演示
#include <bits/stdc++.h> using namespace std; void printVector(vector<int>&v) { for(vector<int>::iterator it = v.begin(); it != v.end();it ++) { cout << *it << " "; } cout<<endl; } //vector容器构造 void test01() { vector<int>v1; //构造函数 无参构造 for(int i = 0;i < 10 ;i++) { v1.push_back(i); } printVector(v1); //通过区间方式构造 vector<int>v2(v1.begin(),v1.end()); printVector(v2); //n个elem方式构造 vector<int> v3(10,100); //表示10个100 printVector(v3) ; //拷贝构造 vector<int>v4(v3); printVector(v4); } int main() { test01(); }
结果
三、Vector赋值操作
功能描述
给vector容器赋值
函数原型
vector& operator = (const vector &vec); //重载等号操作符
assign(beg,end); //将[beg,end)区间的数据拷贝赋值给本身
assign(n,elem); //将n个elem拷贝赋值给本身
例子演示
#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; } //vector赋值 void test01() { vector<int>v1; for(int i = 0;i < 10;i ++) { v1.push_back(i); } printVector(v1); //赋值 operator = vector<int> v2; v2 = v1; printVector(v2); //assign vector<int> v3; v3.assign(v1.begin(),v1.end()); printVector(v3); //assign vector<int> v4; v4.assign(10,100); printVector(v4); } int main() { test01(); }
四、Vector容量和大小
功能描述:
对vector容器的容量和大小操作
empty(); //判断容器是否为空 capacity(); //容器的容量 size(); //返回容器中元素的个数 resize(int num); //重新指定容器的长度为num,若容器变长,则以默认值填充新位置 //如果容器变短,则末尾超出容器的长度被删除 resize(int num,elem) //重新指定容器的长度为num,若容器变长,则以elem填充新位置 //如果容器变短,则末尾超出容器的长度被删除
例子演示
#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; } //vector 容器的容量和大小操作 void test01() { vector<int>v1; for(int i = 0; i < 10;i ++){ v1.push_back(i); } printVector(v1); if(v1.empty()) //为真 代表容器为空 { cout<< "v1为空"<<endl; } else{ cout<<"v1不为空"<<endl; cout<<"v1的容量为:"<< v1.capacity() << endl; cout<<"v1的大小为:"<< v1.size() << endl; } //重新指定大小 v1.resize(15,100); //利用重载版本,可以指定默认填充值,参数2 printVector(v1); //如果重新指定的过长,用0填充 v1.resize(5); printVector(v1); //如果重新指定的比原来短了,超出部分会删除掉 } int main() { test01(); }
结果
五、vector插入和删除
功能描述
对vector容器进行插入,删除操做
push_back(ele); //尾部插入ele pop_back(); //删除最后一个元素 insert(const_iterator pos,ele); //迭代器指向pos插入元素ele insert(const_iterator pos,int count,ele); //迭代器指向位置pos插入count个元素ele erase(const_iterator pos); //删除迭代器指向的元素 erase(const_iterator start,const _iterator end()); //删除迭代器从start到end之间的元素 clear(); //删除容器中所有元素
例子演示
#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 <<" "; } } void test01() { vector<int>v1; //尾插法 v1.push_back(10); v1.push_back(20); v1.push_back(30); v1.push_back(40); v1.push_back(50); //遍历 printVector(v1); //尾删 v1.pop_back(); printVector(v1); //插入 第一个参数是迭代器 v1.insert(v1.begin(),100); //在前面插入一个100 printVector(v1); v1.insert(v1.begin,2,1000) //在前面插俩个1000 //删除 v1.erase(v1.begin()); printVector(v1); v1.erase(v1.begin(),v1.end()); //从头到尾全部删除 //清空 v1.clear(); } int main() { test01(); }
六、vector数据存取
功能描述
对vector中的数据存取操作
函数原型
at(int idx); //返回idx所指的数据
operator[ ] //返回idx所指的数据
front(); //返回容器中第一数据元素
back(); //返回容器中最后一个数据元素位置
代码示例
#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 <<" "; } } void test01() { vector<int>v1; for(int i = 0;i < 10;i++) { v1.push_back(i); } //利用[]方式访问数组中元素 for(int i = 0;i < v1.size();i++) { cout<< v1[i] << " "; } cout<<endl; //利用at方式访问 for(int i = 0;i < 10; i++) { cout<<v1.at(i)<<" "; } cout<<endl; //获取第一个元素 cout<<"第一个元素为:"<< v1.front() <<endl; //获取最后一个元素 cout<<"最后一个元素为:"<<v1.back()<<endl; } int main() { test01(); }
七、vector互换容器
功能描述
实现俩个容器内元素互换
swap(vec); //将vec与本身的元素互换
代码示例
#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 test01() { vector<int>v1; for(int i = 0;i < 10;i++) { v1.push_back(i); } cout<<"交换前:"<<endl; printVector(v1); vector<int>v2; for(int i =10;i >0 ;i--) { v2.push_back(i); } printVector(v2); cout<<"交换后:"<<endl; v1.swap(v2); printVector(v1); printVector(v2); } //实际用途 //巧用swap可以收缩内存空间 void test02() { vector<int>v; for(int i = 0;i < 100000 ;i++) { v.push_back(i); } cout<< "v的容量为:"<< v.capacity() <<endl; //capacity指容器的容量 cout<< "v的大小为:"<< v.size()<<endl; v.resize(3); // 重新指定大小 cout<< "v的容量为:"<< v.capacity() <<endl; cout<< "v的大小为:"<< v.size()<<endl; //巧用 swsp收缩内存空间 vector<int>(v).swap(v); cout<< "v的容量为:"<< v.capacity() <<endl; cout<< "v的大小为:"<< v.size()<<endl; } int main() { test01(); test02(); }
结果
八、预留空间
功能描述
减少vector在动态拓展容量时的拓展次数
reserve(int len); /容器预留len个元素长度,预留位置不初始化,元素不可访问
代码示例
#include <iostream> using namespace std; #include <vector> void test01() { 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]){ p =&v[0]; num++; } } cout<<"num = " << num << endl; } int main() { test01(); }