Vector数据结构的基本函数

mac2026-06-07  2

1.vector函数分为构造函数、迭代器函数、容量类函数、操作类函数、存取类函数。 2.vector是一种连续存取的容器,自动存取和释放存储区域,所以new和delete关键字不需要对内存操作 3.并且析构函数在程序结束时也自动调用 4.vector和stack(栈)一样都是先进后出式数据结构

构造类函数

在list顺序容器中不能在构造函数中对first和last指针进行加减{          v1.(v2.begin()+1,v2.end())          }

#include <iostream> #include <vector> using namespace std; int main() { vector<int> v1(4); vector<int> v2(4,9); vector<int> v3(v1.begin()+n,v1.end()); vector<int> v4(v2); }

第一个是迭代器类函数的代码

#include <iostream> #include <vector> using namespace std; int main() { vector<char> v; vector<char>::iterator it;//类似于一种指针的存在可以更好的在vector容器中调出元素 for(int i=0;i<8;i++) v.push_back('A'+i); for(it=v.begin();it<v.end();it++)//begin和end函数返回的都是指针位置,end函数返回的是最后一个元素后一个的位置 cout<<*it<<" "; } #include <iostream> #include <vector> using namespace std; int main() { vector<char> v; for(int i=0;i<5;i++) v.push_back('a'+i); vector<char>::reverse_iterator rit; for(rit=v.rbegin();rit<v.rend();rit++)//rbegin函数返回容器里最后一个元素的迭代器,rend函数返回容器里第一个元素前一个的元素的迭代器 cout<<*rit<<" "; cout<<endl; }

 

 第二个是容量类函数的代码: 

#include <iostream> #include <vector> using namespace std; int main() { vector<char> v; if(v.empty())//如果v容器中没有元素则为true,否则为false { cout<<"容器为空的!"<<endl; } for(int i=0;i<200;i++) v.push_back(i); cout<<"实际容器中的元素个数"<<v.size()<<endl; cout<<"容器的存储空间"<<v.capacity()<<endl; cout<<"容器的最大容量"<<v.max_size()<<endl; v.reserve(1000);//如果存储空间的重新分配小于原来值 则修改无效 cout<<"现在的容器的存储空间:"<<v.capacity()<<endl; v.resize(300);//如果数值小于原来值 则删去多余的部分元素 v.resize(300,'z');//多余的空间的元素都为 ‘z' cout<<"现在容器的大小"<<v.size()<<endl; }

 

第三个是操作类函数的代码: 

#include <iostream> #include <vector> using namespace std;//assign赋值函数,insert函数插入,erase函数删除,clear函数清除全部元素,push_back函数尾部添加,swap函数交换元素 void display(vector<int> mn) { for(int i=0;i<mn.size();i++) cout<<mn.at(i)<<" "; cout<<endl; } int main() { vector<int> v1(10,9); vector<int> v2(10,8); vector<int>::iterator it; cout<<"原本v1顺序容器里的元素:"; display(v1); cout<<"原本v2顺序容器里的元素:"; display(v2); cout<<"******************************************************************************************"<<endl; v1.assign(5,1); cout<<"assign第一种函数赋值后的v1:"; display(v1); v2.assign(v1.begin(),v1.end()-1);//给v2容器的元素重置为:v1容器的begin元素到end元素的前一个元素 cout<<"assign第二种函数赋值后的v2:"; display(v2); cout<<"******************************************************************************************"<<endl; it=v1.begin();//it初始值为1 v1.insert(it,98);//仅第一二种函数有返回值,返回值为最后一个插入得元素,返回值直接赋予了it cout<<"给v1插入的元素值是:"<<*it<<endl; cout<<"insert第一种函数插入后的v1:"; display(v1); v1.insert(it,5,20);//第二次的返回值it无法再次接收,it失去意义 cout<<"insert第二种函数插入后的v1:"; display(v1); it=v1.begin();//重新定义it v1.insert(it,v1.begin(),v1.end());//以frist到last的区块式插入,数组也可以类似插入! cout<<"insert第三种函数插入后的v1:"; display(v1); cout<<"******************************************************************************************"<<endl; it=v1.erase(v1.begin());//erase函数会返回最后一个被删除元素的后一个位置 cout<<"v1容器被删除的元素的后一个元素是:"<<*it<<endl; cout<<"erase第一种函数删除后的v1:"; display(v1); v1.erase(v1.begin(),v1.begin()+2); cout<<"erase第二种函数删除后的v1:"; display(v1); cout<<"******************************************************************************************"<<endl; v1.clear();//clear函数是没有返回值的! cout<<"clear函数删除过后的v1容器:"; display(v1); cout<<"******************************************************************************************"<<endl; v1.swap(v2); cout<<"经过swap函数交换v1和v2容器里的内容值后--------"<<endl; cout<<"v1现在的元素是:"; display(v1); cout<<"v2现在的元素是:"; display(v2); }

 

 第四个是存取类的代码:

#include <iostream> #include <vector> using namespace std; int main() { int str[]={12,23,35,45,56,63,73}; int n=sizeof(str)/sizeof(str[0]); vector<int> v(n);//n为str数组的长度,否则不能使用at函数,因为会越界异常 for(int i=0;i<n;i++) v.at(i)=str[i];//at函数需要在for、while等循环结构里才可以使用 for(int i=0;i<n;i++) cout<<v.at(i)<<" "; cout<<endl; int t; for(int i=0;i<n/2;i++)//倒叙一遍 { t=v.at(i); v.at(i)=v.at(n-i-1); v.at(n-i-1)=t; } v.push_back(2019);//vector中只可以在后面这样插入元素,在deque中可以push_front在前面插入 for(int i=0;i<n;i++) cout<<v.at(i)<<" "; cout<<endl; cout<<"容器的第一个元素:"<<v.front()<<endl; cout<<"容器的最后一个元素:"<<v.back()<<endl; }

 

 

 

最新回复(0)