STL标准模板库 --- vector
STL常用函数总结-vector
vector可以看作数组的增强版,可以用类似数组的直接取得方式存取,也可以使用函数操作,好处是可以不用提前规定长度,可以实现不定长度的存储。
需要的头文件:#include < vector >
声明:vector <存储内容的类型 > 向量名称
除了常见的声明之外还有其余几种声明方式
vector a ; //声明一个int型向量a
vector a(10) ; //声明一个初始大小为10的向量
vector a(10, 1) ; //声明一个初始大小为10且初始值都为1的向量
vector b(a) ; //声明并用向量a初始化向量b
vector b(a.begin(), a.begin()+3) ; //将a向量中从第0个到第2个(共3个)作为向量b的初始值
也可以用数组直接初始化
int n[] = {1, 2, 3, 4, 5} ;
vector a(n, n+5) ; //将数组n的前5个元素作为向量a的初值
vector a(&n[1], &n[4]) ; //将n[1] - n[4]范围内的元素作为向量a的初值
与数组不同的是向量可以使用一些函数操作
① q.size() 获取向量中元素的个数,常用与便利向量中元素时循环结束条件的判断
② q.empty() 判断向量是否为空
③ q.clear() 清空向量中全部元素,也用于向量的初始化
④ q.insert() 在向量中加入元素,具体的操作有多种,可以是添加位置+要添加元素(q.insert(a.begin(),1000)在向量a的开头处添加一个元素1000),也可以是添加位置+添加长度+添加元素(q.insert(a.begin(),3,1000)在向量a开始的位置到后面三个位置添加元素1000),insert的操作有很多,需要活学活用
⑤ q.push_back()把一个元素插在向量最后面,类似于其他STL的push操作,一般Insert可以多组插入,而push_back只能一次一个
⑥ q.pop_back 与push_back相对,删除向量中最后一个
⑦ 对于另外一些还没用到过的函数,直接挂一下百度的,照葫芦画瓢即可
c.back() // 传回最后一个数据,不检查这个数据是否存在。
c.begin() // 传回迭代器中的第一个数据地址。
c.capacity() // 返回容器中数据个数。
c.end() // 指向迭代器中末端元素的下一个,指向一个不存在元素。
c.erase(pos) // 删除pos位置的数据,传回下一个数据的位置。
c.erase(beg,end) //删除[beg,end)区间的数据,传回下一个数据的位置。
c.front() // 传回第一个数据。
get_allocator // 使用构造函数返回一个拷贝。
c.insert(pos,elem) // 在pos位置插入一个elem拷贝,传回新数据位置。
c.insert(pos,n,elem) // 在pos位置插入n个elem数据。无返回值。
c.insert(pos,beg,end) // 在pos位置插入在[beg,end)区间的数据。无返回值。
c.max_size() // 返回容器中最大数据的数量。
c.pop_back() // 删除最后一个数据。
c.push_back(elem) // 在尾部加入一个数据。
c.rbegin() // 传回一个逆向队列的第一个数据。
c.rend() // 传回一个逆向队列的最后一个数据的下一个位置。
c.resize(num) // 重新指定队列的长度。
c.reserve() // 保留适当的容量。
c.size() // 返回容器中实际数据的个数。
c1.swap(c2)
swap(c1,c2) // 将c1和c2元素互换。同上操作。
除了可以作为单个向量使用,向量也可以建成数组的形式,成为向量数组。在与图有关的题目中有时候也可以用这种结构存储邻接点,从而避免使用邻接矩阵。在STL中向量有一个很人性化的操作就是可以按照数组的存取方式存取,比如说要取向量中的第三个元素,可以直接用q[2]来取,并不一定需要遍历整个向量才可以,这一点在实际操作的时候会很方便。
</div>
<link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-095d4a0b23.css" rel="stylesheet">
</div>
</article>
</div>