几种常用容器元素删除的方法

本文探讨了如何在关联式容器和列表中高效地删除特定值(如1022)的元素,包括使用迭代器进行操作的技巧,并强调了不同容器特性的注意事项。同时,解释了在关联式容器中使用`erase`函数的限制以及推荐的替代方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于vector:
vector<int>::iterator itVec = vectInt.begin();
// 删除所有值为1022的元素
for ( ; itVec != vectInt.end(); )
{
 // 删除
 if (*itVec == 1022) 
  itVec = vectInt.erase(itVect);   //erase返回指向被删元素之后的那个元素的迭代器
 else
  ++itVec;
}

对于list 

ist<int>::iterator itList = listInt.begin();
// 删除所有值为1022的元素
for ( ; itList != listInt.end(); )
{
 // 删除
 if (*itList == 1022) 
  listInt.erase(itList++);  //list内部链表实现
 else
  ++itList ;
}

//vector不能用上面那种方法是因为vector内部是一块连续的内存,而list则是链表。

关联式容器:

关联式容器循环删除

for (iter = map.begin(); iter != map.end(); ) 
{
 if (shouldDelete(*iter))
  map.erase(iter++);
 else
  ++iter;
}


因为关联式容器的erase并不返回下一个元素的迭代器,因此不能用iter = map.erase(iter)这样的表达式(有些版本的STL实现又可以这样写,我建议还是使用 map.erase(iter++)保证移植性)。

关联容器同样也可以用remove等来删除元素。
### C++ 中删除 `std::vector` 容器元素方法 在 C++ 编程语言中,`std::vector` 提供了多种方法删除其中的元素。以下是几种常见的操作方式及其对应的代码示例。 #### 使用 `pop_back()` 删除末尾元素 如果只需要移除 `std::vector` 的最后一个元素,则可以直接调用 `pop_back()` 函数。此函数不返回被删除元素值,并且只会影响容器的大小而不改变其容量[^1]。 ```cpp #include <iostream> #include <vector> int main() { std::vector<int> vec = {1, 2, 3}; // 删除末尾元素 for (const auto& elem : vec) { std::cout << elem << " "; } std::cout << "\n"; vec.pop_back(); // 移除最后一位 // 删除末尾元素后 for (const auto& elem : vec) { std::cout << elem << " "; } return 0; } ``` #### 使用 `erase()` 删除指定位置或范围内的元素 当需要更灵活地控制哪些元素应该被移除时,可以使用 `erase()` 方法。它可以接受单个迭代器或者一对表示区间的迭代器作为参数[^4]。 ##### 单一元素删除 通过传递一个指向目标元素的迭代器给 `erase()` 来实现特定位置上的元素清除: ```cpp #include <iostream> #include <vector> void printVector(const std::vector<int>& v){ for(auto num:v){ std::cout<<num<<" "; } std::cout<<"\n"; } int main(){ std::vector<int> myVec={10,20,30,40}; printVector(myVec); // 假设要删除第二个元素即数值为20的那个 if(!myVec.empty()){ auto it=myVec.begin()+1; // 这里假设索引从零开始计数 myVec.erase(it); printVector(myVec); } return 0; } ``` ##### 范围内元素批量删除 同样也可以利用两个边界迭代器之间形成的半开区间来进行连续多个项目的剔除工作: ```cpp // 继续上面的例子... if (!myVec.empty()) { auto firstIt = myVec.begin(); auto lastIt = myVec.end()-1; myVec.erase(firstIt,lastIt); printVector(myVec); } ``` 以上展示了如何分别针对单独项目以及整段数据序列实施消除动作的过程说明文档[^4]. #### 清空整个 Vector 对于希望一次性全部清空的情况而言,最简便的方式莫过于运用内置成员函数 `clear()` 。这将会把所有的现存条目都予以销毁掉,使得 size 成为了零的同时保留原有的 capacity 大小不变直到再次新增为止[^4]: ```cpp myVec.clear(); printVector(myVec); // Output should be empty now. ``` --- ### 总结 综上所述,在实际开发过程中可以根据具体需求选用不同的手段完成对标准库所提供的动态数组类型——`std::vector` 内部存储项的操作管理任务。无论是简单粗暴式的整体丢弃还是精确细致定位后的局部调整均能找到合适的解决方案加以应对处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值