STL - Vector基础

Vector 基础:

概述:

向量(Vector)是一个封装了动态大小数组的顺序容器。跟任意其他类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组

1、Vector的定义

像定义变量一样定义vector变量:
vector<类型名> 变量名;
类型名可以是int、double、char、struct,也可以是STL容器:vector、set、queue。

vector<int> name;
vector<double> name;
vector<char> name;
vector<struct node> name;
vector<vector<int> > name;//注意:> >之间要加空格 

注意:vector<vector > name; >>之间要加空格。
vector数组就是一个一维数组,如果定义成vector数组的数组,那就是二维数组。
vector<int> array[SZIE]; //二维变长数组

2、Vector容器内元素的访问

  • 1、通过下标访问
#include <iostream>
#include <vector>
using namespace std;

int main(){
   vector<int> vi;
   vi.push_back(1);
   cout<<vi[0]<<endl;
   return 0;
}
  • 2、通过迭代器访问
    迭代器(iterator)可以理解为指针:
vector<类型名>::iterator 变量名;
//例如:
vector<int>::iterator it;
vector<double>::iterator it;
//例子:
#include <iostream>
#include <vector>
using namespace std;

int main(){
   vector<int> v;
   for (int i = 0; i < 5; i++)
   {
       v.push_back(i);
   }
   //v.begin()返回v的首元素地址
   vector<int>::iterator it=v.begin();
   for (int i = 0; i < v.size(); i++)
   {
      cout<<it[i]<<" ";
   }
   return 0;
}

for循环迭代部分也可以写成:

vector<int>::iterator it=v.begin();
   for (int i = 0; i < v.size(); i++)
   {
      cout<<*(it+i)<<" ";
   }

与此同时,迭代器与for循环还有一种优雅的写法。

#include <vector>
using namespace std;

int main(){
   vector<int> v;
   for (int i = 0; i < 5; i++)
   {
       v.push_back(i);
   }
   //vector的迭代器不支持it<v.end()的写法,因此循环条件只能it!=v.end()
   for (vector<int>::iterator it=v.begin(); it!=v.end();it++)
   {
       cout<<*it<<" ";
   }
   return 0;
}

3.vector常用函数实例解析

1、push_back()
void std::vector<int>::push_back(const int &__x)
见名知意,push_back(item)就是在vector后面添加一个元素item。

#include <iostream>
#include <vector>
using namespace std;

int main(){
   vector<int> v;
   for (int i = 0; i < 5; i++)
   {
       v.push_back(i);
   }
   for (int i = 0; i < v.size(); i++)
   {
       cout<<v[i]<<" ";
   }
   return 0;
}

2、pop_back()
void std::vector<int>::pop_back()
push和pop时一对反义词,学过数据结构的人都知道,栈元素的压入和弹出就是push和pop。须知,pop_back()一次弹出一个元素,vector容器就会减少一个预算。之所以叫容器,就是能往里面装一个一个的元素。

#include <iostream>
#include <vector>
using namespace std;

int main(){
   vector<int> v;
   for (int i = 0; i < 5; i++)
   {
       v.push_back(i);
   }
   cout<<"pop_back前:"<<endl;
   for (int i = 0; i < v.size(); i++)
   {
       cout<<v[i]<<" ";
   }
   cout<<endl;
   v.pop_back();
   cout<<"pop_back后:"<<endl;

   for (int i = 0; i < v.size(); i++)
   {
       cout<<v[i]<<" ";
   }
   return 0;
}

3、size()
std::size_t std::vector<int>::size()
szie()返回vector中所含元素的个数,时间复杂度为O(1)。

#include <iostream>
#include <vector>
using namespace std;

int main(){
   vector<int> v;
   for (int i = 0; i < 5; i++)
   {
       v.push_back(i);
   }
   cout<<v.size()<<endl;
   return 0;
}

4、clear()
void std::vector<int>::clear()
clear()用于一键清空vector中的所有元素,时间复杂度为O(N),其中N为vector中原属和元素的个数。

#include <iostream>
#include <vector>
using namespace std;

int main(){
   vector<int> v;
   for (int i = 0; i < 5; i++)
   {
       v.push_back(i);
   }
   for (int i = 0; i < v.size(); i++)
   {
       cout<<v[i]<<" ";
   }
   v.clear();
   cout<<endl;
   cout<<"size = "<<v.size()<<endl;
   return 0;
}

5、insert()

insert(__position,__x);
insert(要插入的地址,要插入的元素);

参数:
__position:– A const_iterator into the %vector.
__x:– Data to be inserted.

与push_back()无脑在尾部添加元素不同的是,insert()是根据指定位置在vector中插入元素。

#include <iostream>
#include <vector>
using namespace std;

int main(){
   vector<int> v;
   for (int i = 0; i < 5; i++)
   {
       v.push_back(i);
   }
   for (int i = 0; i < v.size(); i++)
   {
       cout<<v[i]<<" ";
   }
   v.insert(v.begin()+2,-1); //将-1插入v[2]的位置
   cout<<endl;
   for (int i = 0; i < v.size(); i++)
   {
      cout<<v[i]<<" ";
   }
   return 0;
}

6、erase()
erase(__position);
同样,与clear()简单粗暴清空vector不同的是erase(),删除指定位置的元素。

  • 删除一个元素
    erase(__position);
  • 删除一个区间内的元素
    erase(__positionBegin,__positionEnd);
    即是删除[ __positionBegin,__positionEnd )区间内的元素,注意:是左闭右开!
posted @ 2023-03-08 20:36  盧倫  阅读(46)  评论(0)    收藏  举报