STL常用容器用法之——vector

来源:互联网 发布:windows功能哪些不能关 编辑:程序博客网 时间:2024/06/13 16:48

Vector容器

vector是将元素置于一个动态数组中加以管理的容器。

vector尾部添加或移除元素非常快速。但是在中部或头部插入元素或移除元素比较费时。

1、定义一个vector容器

vector采用模板类实现,vector对象的默认构造形式

vector<T> vecT; 

vector<int> vecInt;          //一个存放int的vector容器。

Class CA{};

vector<CA*> vecpCA;             //用于存放CA对象的指针的vector容器。

vector<CA> vecCA;             //用于存放CA对象的vector容器。由于容器元素的存放是按值复制的方式进行的,所以此时CA必须提供CA的拷贝构造函数,以保证CA对象间拷贝正常。

2、vector添加删除

vector<int> vecInt;

vecInt.size(); //容器的大小,默认为0


vecInt.push_back(1);  //在容器尾部加入一个元素

vecInt.push_back(3);  

vecInt.push_back(5);  

int iF = vecInt.front();       //获取头部元素1

int iB = vecInt.back();       //获取尾部元素5

 vecInt.front() = 11;       //设置头部元素11  {11 3 5}

vecInt.back() = 55;       //设置尾部元素55 {11 3 55}


vecInt.pop_back(); //删除尾部元素


3、vector的初始化

int iArray[] = {0,1,2,3,4};

vector<int>  vecIntA( iArray,  iArray+5 );

vector<int> vecIntB (  vecIntA.begin() , vecIntA.end()  );   //用构造函数初始化容器vecIntB

vector<int> vecIntB (  vecIntA.begin() , vecIntA.begin()+3  ); 

vector<int> vecIntC(3,9); //此代码运行后,容器vecIntB就存放3个元素,每个元素的值是9。

4、vector的遍历 

1)通过数组的方式 

vector<int> v1(10);   //提前把内存准备好 每个元素初始化为0

for (int i=0; i<10; i++)
{
v1[i] = i + 1;
}

  for (int i=0; i<10; i++)
  {
  printf("%d ", v1[i]);
  }
2)通过迭代器
//正向遍历
for (vector<int>::iterator it = v1.begin(); it != v1.end(); it ++ )
{
cout << *it << " ";
}


//逆序遍历
for (vector<int>::reverse_iterator rit = v1.rbegin(); rit!=v1.rend(); rit++ )
{
cout << *rit << " ";
}

5、vector的删除操作

//区间删除
v1.erase(v1.begin(), v1.begin()+3);
//根据元素的位置 指定位置删除
v1.erase(v1.begin()); //在头部删除一个元素  输入:迭代器

//根据元素的值 
v1[1] = 2;
v1[3] = 2;
printV(v1);

for (vector<int>::iterator it =v1.begin(); it != v1.end();)
{
if (*it == 2)
{
it = v1.erase(it);  //当 删除迭代器所指向的元素的时候,erase删除函数会返回迭代器it的下一个位置
}
else
{
it ++;
}
}

//删除vecInt的所有元素

vecInt.clear();                    //容器为空


6、vector的插入

vector.insert(pos,elem);   //在pos位置插入一个elem元素的拷贝,返回新数据的位置。

vector.insert(pos,n,elem);  //在pos位置插入n个elem数据,无返回值。

vector.insert(pos,beg,end);  //在pos位置插入[beg,end)区间的数据,无返回值


例:
vecA {1 3 5 7 9}
vecB{2 4 6 8}

         vecA.insert(vecA.begin(),11);          //{11, 1, 3, 5, 7, 9}

         vecA.insert(vecA.begin()+1,2,33);            //{11,33,33,1,3,5,7,9}

         vecA.insert(vecA.begin(), vecB.begin() , vecB.end() );   //{2,4,6,8,11,33,33,1,3,5,7,9}