c++ - 从标准数组中擦除元素
问题描述
是否可以从 中删除迭代器指向的特定元素std array
?我知道std vector
提供erase()
方法。是否也可以实现相同的逻辑std array
?
解决方案
根据定义,std::array
它具有固定大小,因此它不能提供任何会改变大小的方法。
但是,您仍然可以使用其中一种删除算法。这些算法实际上不会删除任何元素,而只会将它们移动到序列的末尾,以便所有“删除”的元素都落在您范围内的某个边界之后。此边界作为迭代器返回。
例子:
std::array<int, 4> arr = {0, 1, 2, 3};
auto newEnd = std::remove(arr.begin(), arr.end(), 2);
for (auto iter = arr.begin(); iter != newEnd; ++iter)
std::cout << *iter << "\n";
在这里查看一个活生生的例子。
但同样,重要的是要了解不会从arr
. arr.begin()
只是和给出的范围newEnd
不再包含任何内容2
。对于一个std::vector
你现在可以使用这个newEnd
迭代器,实际上删除后面的所有东西,从而改变向量的大小。因为std::array
你不能这样做。
推荐阅读
- java - Java 中高效的 Zip 文件流
- php - 字符串的 === 运算符的 PHP 内部实现
- html - 如何根据html中的div大小调整图像
- python - 在 Mac 上的 Jupyter Notebook 和西班牙语 ISO 中将多行代码转换为注释
- dataframe - 将 Dataframe 写入 Azure SQL Server 表的最佳实践?
- r - 使用特定条件在 R 中拆分字符串
- c# - 以非升序从大文件中读取多行
- python - 如何将单端口用于 3 个容器而不是 3 个端口 Python-Flask、PostgreSQL 和 Angular8?所以我可以使用 Docker Run 而不是 Docker Compose
- c++ - IMG_Load() 中的 SDL_Texture 无法绘制?
- java - 采集界面