STL容器vector使用

STL容器vector使用

vector利用动态数组实现。vector中主要涉及的操作函数如下:

  • 构造、拷贝和析构操作

vector c:产生一个空vector,其中没有任何元素。
vector c1(c2):产生另一个同型vector的副本(所有元素都被拷贝)
vector c(n):利用元素的default构造函数生成一个大小为n的vector
vector c(n, elem):产生一个大小为n的vector,每个元素值都是elem
vector c(beg, end):产生一个vector,以区间[begin; end]做为元素初值
c.~vector():销毁所有元素,并释放内存

  • 非变动性操作

c.size():返回当前的元素数量
c.empty():判断大小是否为零。等同于size()==0,当可能更快
c.max_size():返回可容纳的元素最大数量
capacity():返回重新分配空间所能容纳的元素最大数量
reserve():如果容量不足,扩大之
c1 == c2:判断c1是否等于c2
c1 != c2:判断c1是否不等于c2,等同于!(c2==c2)
c1 < c2:判断c1是否小于c2
c1 > c2:判断c1是否大于c2,等同于c2 < c1
c1 <= c2:判断c1是否小于等于c2,等同于!(c2 < c1)
c1 >= c2:判断c1是否大于等于c2,等同于!(c1 < c2)

  • * 赋值操作*

c1 = c2:将c2的全部元素赋值给c1
c.assign(n, elem):复制n个elem,赋值给c
c.assign(beg, end):将区间[beg; end]内的元素赋值给c
c1.swap(c2):将c1和c2元素互换
swap(c1, c2):将c1和c2元素互换。此为全局函数

  • 元素存取操作

c.at(idx):返回索引idx所标示的元素。如果idx越界,抛出out_of_range
c[idx]:返回索引idx所标示的元素。不进行范围检查
c.front():返回第一个元素。不检查第一个元素是否存在
c.back():返回最后一个元素。不检查最后一个元素是否存在

  • 迭代器相关操作

c.begin():返回一个随机存取迭代器,指向第一个元素
c.end():返回一个随机存取迭代器,指向最后元素的下一个位置
c.rbegin():返回一个逆向迭代器,指向逆向迭代的第一个元素
c.rend():返回一个逆向迭代器,指向逆向迭代的最后元素的下一个位置

  • 插入、移除相关操作

c.insert(pos, elem):在pos位置上插入一个elem副本,并返回新元素位置
c.insert(pos, n, elem):在pos位置上插入n个elem副本。无回传值
c.insert(pos, beg, end):在pos位置上插入区间[beg; end]内的所有元素的副本无回传值
c.push_back(elem):在尾部添加一个elem副本
c.pop_back():移除最后一个元素(但不回传)
c.erase(pos):移除pos位置上的元素,返回下一个元素的位置
c.erase(beg, end):移除[beg, end]区间内的所有元素。返回下一元素的位置
c.resize(num):将元素数量改为num(如果size()变大了,多出来的新元素都需以default构造函数完成)
c.resize(num, elem):将元素数量改为num(如果size()变大了,多出来的新元素都是elem的副本)
c.clear():移除所有元素,将容器清空

  • vector异常处理操作

如果push_back()安插元素时发生异常,该函数不起作用
如果元素的拷贝操作(包括copy构造函数和assignment操作符)不抛出异常,那么insert()要么成功,要么不生效用
pop_back()决不会抛出任何异常
如果元素拷贝操作(包括copy构造函数和assignment操作符)不抛出异常,erase()和clear()就不抛出异常。
swap()不抛出异常
如果元素拷贝操作(包括copy构造函数和assignment操作符)绝对不会抛出异常,那么所有操作不是成功,就是不起作用。

  • vector的特殊操作

c.flip():将所有bool元素值取反之,亦即求补码
m[idx].flip():将索引idx的bit元素取反值
m[idx] = val:令索引idx的bit元素值为val(指定单一bit)
m[idx1] = m[idx2]:令索引idx1的bit元素值为索引idx2的bit元素值

参考文献:C++标准库、STL源码分析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值