找到java项目所在的位置_如何在向量中找到项目的位置?

std :: find和std :: find_if都返回一个迭代器 . 您可以使用此迭代器来删除或插入,您可以从此迭代器计算项的索引:

std::vector v = {'a', 'b', 'c'};

// Search for 'b'

auto it = std::find(v.begin(), v.end(), 'b');

// To get the index of 'b'

auto index = it - v.begin();

// To insert in front of 'b' (the result is a vector of 'a', 'x', 'b', 'c')

// You cannot use the iterator after this operation!

v.insert(it, 'x');

// Search 'c' and delete it

it = std::find(v.begin(), v.end(), 'c');

v.erase(it);

只要未修改向量,迭代器就是有效的 . 因此每个insert(),push_back(),erase()或clear()都会使所有迭代器无效 .

对于std :: vector,迭代器的行为类似于普通指针 . 你可以移动它(它, - it)你可以用它做数学运算(即从另一个迭代器中减去一个迭代器得到距离oder减去begin()迭代器得到绝对索引) .

如果插入或删除矢量,则必须移动部分或全部项目 . (即如果你从''a','b','c'}中删除'b','c'必须移到前'b'的位置 . 这就是为什么在修改向量后,指向已删除项目之后或之后的任何项目的迭代器都会失效的原因 .

如果向向量添加新元素,则保留的容量可能太小而无法保存新值 . 在这种情况下,分配新的存储器块,并将所有现有的项从旧的存储器块复制到新的更大的存储器块 . 因此,即使您只是追加新值,插入也可能使所有迭代器无效 .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值