容器元素的删除erase,size,clear方法的使用

本文通过一个C++程序示例介绍了如何使用标准库中的vector容器进行元素的添加、遍历、删除及清空等操作,并展示了不同操作对容器大小的影响。
#include <iostream>
#include <vector>
using namespace std;


int main()
{
vector<int> v;


for(size_t i=0; i !=10 ; ++i)
{
v.push_back(i);
}


for (vector<int>::iterator it =v.begin(); it != v.end(); ++it)
{
cout << *it << ' ';


}
cout << endl;
cin.get();


v.erase(v.begin()+2);//删除该下标的值;
cout << v.size() << endl;


for (vector<int>::iterator it2 =v.begin(); it2 != v.end(); ++it2)
{
cout << *it2 << ' ';

}
cout << endl;
cin.get();


v.erase(v.begin(),v.begin()+4);
cout << v.size() << endl;



for ( it2 =v.begin(); it2 != v.end(); ++it2)
{
cout << *it2 << ' ';

}
cout << endl;
v.clear();//清除所有容器


cout << v.size();



cout << endl;
cin.get();


return 0;
}
### C++ STL `erase` 和 `clear` 的区别及用法 #### 对于 `vector` 在处理 `std::vector` 时,`erase` 和 `clear` 都用于移除元素,但两者的行为有所不同。 - **`erase` 函数** 此函数允许删除单个元素或指定范围内的多个元素。它返回指向被删元素之后那个位置的新迭代器。如果删除的是最后一个元素,则返回 `end()` 迭代器[^3]。 ```cpp #include <iostream> #include <vector> int main() { std::vector<int> vec = {1, 2, 3, 4, 5}; // 删除第三个元素 (索引为2) vec.erase(vec.begin() + 2); for(auto& v : vec){ std::cout << v << ' '; } } ``` - **`clear` 成员函数** 该方法会清除整个容器中的所有元素,使容器为空。调用后,容器的大小变为零,但是容量不会自动减少;也就是说,分配给它的内存空间仍然保留着直到重新调整大小或者析构对象为止。 ```cpp #include <iostream> #include <vector> int main(){ std::vector<int> vec = {1, 2, 3}; vec.clear(); std::cout << "Size after clearing: " << vec.size(); } ``` #### 对于 `map` 对于关联式容器如 `std::map` ,同样存在这两种操作: - 使用 `erase` 可以基于键名来删除特定条目,也可以通过提供一对迭代器来定义要删除的一系列项目。 ```cpp #include <iostream> #include <map> int main(){ std::map<std::string,int> myMap; myMap["apple"] = 10; myMap["banana"] = 20; // 移除 key 为 "apple" 的项 myMap.erase("apple"); for(const auto& pair : myMap){ std::cout << pair.first << ": " << pair.second << '\n'; } } ``` - 而 `clear` 则清空整个映射表,使其不再包含任何键值对。 ```cpp #include <iostream> #include <map> int main(){ std::map<std::string,int> myMap; myMap["apple"] = 10; myMap["banana"] = 20; myMap.clear(); std::cout << "The map is now empty." << std::endl; } ``` #### 总结 当只需要简单地腾空容器而不需要关心具体哪些数据被移除了的时候可以选择使用 `clear` 。然而,在需要精确控制哪部分的数据应该被淘汰的情况下则更适合采用 `erase` 方法来进行更细致的操作。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值