vector的定义

vector,是C++标准模板库(STL)中封装的一种容器,是一种变长数组。可以用来以邻接表的方式储存图。使用vector要添加头文件:

  1. #include<vector>
  2. using namespace std;
  3. vector<typename> vi; //定义一个vector,是个变长一维数组

typename可以是int、char、结构体等,也可以是STL标准容器,例如vector、set、queue等。例如

  1. vector<vector<int> > name;
  2. //这相当于二维数组。>>之间要加空格因为C++11之前标准的编译器会把它视为移位操作。
  3. vector<typename> Arrayname[arraysize];
  4. //定义vector数组,元素的类型是vector,也是二维数组,不过一维长度已固定为arraysize

访问vector容器中的元素

  1. 通过下标访问,vi[0]、vi[1]…
  2. 通过迭代器访问。

迭代器(iterator)可以理解为类似指针的东西。其定义是:

vector::iterator it;

可以通过*it来访问vector里的元素。

  1. vi.begin(); //取vi的首元素地址,对应vi[0]
  2. vi.end(); //取vi尾元素的下一个地址(左闭右开)
  3. vector<int>::iterator it = vi.begin();
  4. //it指向vi的首地址,*(it+i)等价于vi[i]

end()作为迭代器末尾标志,不储存任何元素。

迭代器也有自加自减操作,it和it。且在常用STL容器中,只有vector和string可以使用vi.begin()+n这种迭代器加上整数的写法。

  1. vi.push_back(i); //在vi的末尾添加元素i
  2. vi.pop_back(); //删除vi的尾元素
  3. vi.size(); //获取元素个数
  4. vi.clear(); //清空所有元素
  5. vi.insert(it,x); //向vector的迭代器it处插入一个元素x
  6. vi.insert(vi.begin()+2, -1); //将-1插入vi[2]的位置
  7. vi.erase(it); //删除迭代器为it处的元素
  8. vi.erase(vi.begin()+3); //删除单个元素
  9. vi.erase(vi.begin()+1, vi.begin()+4);//删除vi[1]、vi[2]、vi[3] 左开右闭
  10. vi.erase(vi.begin(). vi.end()); //删除所有元素(yongclear更方便)