关于vector中erase,删除元素的考量

int main()
{
int ia[]={0,1,1,2,4,3,5,8,13,21,55,89};
vector<int> ivec(ia,ia+12);
list<int> ilst(ia,ia+12);


for(vector<int>::iterator iter=ivec.begin();
iter!=ivec.end();)
{
if(*iter%2==0)
iter=ivec.erase(iter);
else
iter++;//这里要注意,删除的时候不加指针,不删除才增加指针
}
for(vector<int>::iterator iter=ivec.begin();
iter!=ivec.end();++iter)
cout<<*iter<<endl;
return 1;

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`vector_erase` 是 C++ 标准库 `<vector>` 模板的一部分,它用于从向量 (`vector`) 删除指定位置的元素。这个操作涉及两个主要步骤: 1. **定位元素** - 通过传递一个迭代器指向要删除元素的位置。迭代器是一种特殊的指针,它能够直接访问容器元素。 2. **移除元素** - 确定元素后,`vector_erase` 实际上并不会立即删除元素,而是创建一个新的向量,将所有位于指定位置之后的元素向前移动一位,以此腾出空间。 其基本语法形式如下: ```cpp iterator erase(iterator position); ``` 或者,如果你想要删除一段连续的范围(例如,从某个特定位置到向量结束),可以使用第二个版本: ```cpp iterator erase(iterator first, iterator last); ``` 这里,`first` 是开始删除元素位置,`last` 则是删除范围的结束位置(不包含该位置对应的元素)。 示例: ```cpp std::vector<int> vec = {1, 2, 3, 4, 5}; vec.erase(vec.begin() + 2); // 删除索引为2的元素,即数字3 ``` 在这个例子,`vec` 现在变成了 `{1, 2, 4, 5}`。 **相关问题:** 1. `erase` 后,原来被删除位置的元素会怎样处理? - 被移动到了新向量的尾部。 2. 如果试图删除向量的开头或结尾,`erase` 会有哪些特殊情况? - 删除开头元素会自动更新头指针;删除结尾元素则可能需要额外判断是否缩小至空向量。 3. 使用 `erase` 删除元素会对向量性能有何影响? - 删除元素会使后续元素前移,对于大向量可能导致性能开销。尽量避免频繁删除元素
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值