手机端怎样做网站建设,网站建设与管理实践收获怎么写,网站上传用什么软件做视频教程,请别人做网站会不会被盗vector 是顺序容器的一种。vector 是可变长的动态数组#xff0c;支持随机访问迭代器#xff0c;所有 STL 算法都能对 vector 进行操作。要使用 vector#xff0c;需要包含头文件 vector。
在 vector 容器中#xff0c;根据下标随机访问某个元素的时间是常数#xff0c;在…vector 是顺序容器的一种。vector 是可变长的动态数组支持随机访问迭代器所有 STL 算法都能对 vector 进行操作。要使用 vector需要包含头文件 vector。
在 vector 容器中根据下标随机访问某个元素的时间是常数在尾部添加一个元素的时间大多数情况下也是常数总体来说速度很快。
在中间插入或删除元素时因为要移动多个元素因此速度较慢平均花费的时间和容器中的元素个数成正比。
在 vector 容器中用一个动态分配的数组来存放元素因此根据下标访问某个元素的时间是固定的与元素个数无关。
vector 容器在实现时动态分配的存储空间一般都大于存放元素所需的空间。例如哪怕容器中只有一个元素也会分配 32 个元素的存储空间。这样做的好处是在尾部添加一个新元素时不必重新分配空间直接将新元素写入适当位置即可。在这种情况下添加新元素的时间也是常数。
但是如果不断添加新元素多出来的空间就会用完此时再添加新元素就不得不重新分配内存空间把原有内容复制过去后再添加新的元素。碰到这种情况添加新元素所花的时间就不是常数而是和数组中的元素个数成正比。
至于在中间插入或删除元素必然涉及元素的移动因此时间不是固定的而是和元素个数有关。
vector中常用的成员函数
成员函数作 用vector()无参构造函数将容器初始化为空vector(int n)将容器初始化为有 n 个元素vector(int n, const T val)假定元素的类型是 T此构造函数将容器初始化为有 n 个元素每 个元素的值都是 valvector(iterator first, iterator last)first 和 last 可以是其他容器的迭代器。一般来说本构造函数初始化的结果就是将 vector 容器的内容变成与其他容器上的区间 [first, last) —致void clear()删除所有元素bool empty()判断容器是否为空void pop_back()删除容器末尾的元素void push_back( const T val)将 val 添加到容器末尾int size()返回容器中元素的个数T front()返回容器中第一个元素的引用T back()返回容器中最后一个元素的引用iterator insert(iterator i, const T val)将 val 插入迭代器 i 指向的位置返回 iiterator insert( iterator i, iterator first, iterator last)将其他容器上的区间 [first, last) 中的元素插入迭代器 i 指向的位置iterator erase(iterator i)删除迭代器 i 指向的元素返回值是被删元素后面的元素的迭代器iterator erase(iterator first, iterator last)删除容器中的区间 [first, last)void swap( vector v)将容器自身的内容和另一个同类型的容器 v 互换
示例 vector 的基本用法。
#include iostream
#include vector //使用vector需要包含此头文件
using namespace std;
template class T
void PrintVector(const vector T v)
{ //用于输出vector容器的全部元素的函数模板typename vector T::const_iterator i;//typename 用来说明 vector T::const_iterator 是一个类型在 Visual Studio 中不写也可以for (i v.begin(); i ! v.end(); i)cout *i ;cout endl;
}
int main()
{int a[5] { 1, 2, 3, 4, 5 };vector int v(a, a 5); //将数组a的内容放入vcout 1) v.end() - v.begin() endl; //两个随机迭代器可以相减输出1)5cout 2); PrintVector(v); //输出2)1 2 3 4 5v.insert(v.begin() 2, 13); //在 begin()2 位置插人 13cout 3); PrintVector(v); //输出3)1 2 13 3 4 5v.erase(v.begin() 2); //删除位于 begin()2 位置的元素cout 4); PrintVector(v); //输出4)1 2 3 4 5vectorint v2(4, 100); //v2 有 4 个元素都是 100v2.insert(v2.begin(), v.begin() 1, v.begin() 3); //将v的一段插入v2开头cout 5)v2:; PrintVector(v2); //输出5)v2:2 3 100 100 100 100v.erase(v.begin() 1, v.begin() 3); //删除 v 上的一个区间即 [2,3)cout 6); PrintVector(v); //输出6)1 4 5return 0;
}PrintVector 模板演示了将容器的引用作为函数参数的用法。就完成输出整个容器内容这个功能来说写成 PrintVector 模板这样是比较笨拙的该模板的适用范围太窄。有没有更好的写法
vector 还可以嵌套以形成可变长的二维数组。例如
#include iostream
#include vector
using namespace std;
int main()
{ vectorvectorint v(3); //v有3个元素每个元素都是vectorint 容器for(int i 0;i v.size(); i)for(int j 0; j 4; j)v[i].push_back(j);for(int i 0;i v.size(); i) {for(int j 0; j v[i].size(); j)cout v[i][j] ;cout endl;}return 0;
}程序的输出结果是
0 1 2 3
0 1 2 3
0 1 2 3vector vector v(3);定义了一个 vector 容器该容器中的每个元素都是一个 vector 容器。即可以认为v 是一个二维数组一共 3 行每行都是一个可变长的一维数组。