如何使用指针从双端删除特定元素
How to remove a specific element from a deque with a pointer
假设我有一个deque<int>
。我还有一个int*
指向双克中x
的特定元素,但我不知道x
的索引。有没有办法只用一个指向x
的指针就可以从我的 deque 中删除x
?
有没有办法只用指向 x 的指针从我的 deque 中删除"x"?
是的,有办法。使用线性搜索查找地址与指针相同的 deque 元素。这应该会生成要删除的元素的迭代器。把它传递给deque::erase
.线性搜索有一个标准算法:std::find_if
.
但请注意,此搜索会产生一些开销。如果首先存储迭代器而不是指针,则可以避免搜索。也就是说,擦除本身具有线性复杂性(除非元素位于其中一端(,因此搜索不会使复杂性逐渐恶化。
另请注意,擦除 deque 的元素会使所有引用(包括指向容器的指针和迭代器(无效,除非您从其中一端擦除(在这种情况下,只有对已擦除元素的引用无效(。
我加入了之前的评论,
解决这个问题可以解决迭代器(Boosted Pointers(,也许线性算法可以实现你的期望。
#include <iostream>
#include <deque>
#include <algorithm>
#include <functional>
int main()
{
int *ptr(0);
ptr=new int;
std::deque<int> values={1,2,3,4,5};
ptr=&values[3]; /*Let's seach for the number 4*/
std::function<void(int&)> lambda = [&](int& it)mutable throw()->
void { (&it == ptr)? values.erase(values.begin()+(&it-
&values[0])):values.begin();};
std::for_each(values.begin(), values.end(), lambda);
for(int& it :values){
std::cout<<it<<std::endl;
}
delete ptr;
*ptr=0;
return 0;
}
如果有任何错误,请告诉我,希望我正确回答了您的任务。
相关文章:
- 如何从存储在std::映射中的std::集中删除元素
- 从嵌套在std::映射中的std::列表中删除元素的最佳方式
- 从矢量中删除元素后出现隔离错误
- 如何使用remove_if从矢量中删除元素
- 如何从使用 for 循环中的矢量大小的矢量中删除元素
- C++映射不删除元素
- 如何从标准::元组中删除元素?
- 在动态数组中添加/删除C++元素
- 如何通过比较彼此的成员从QStringList中删除元素
- 如何修复从矢量中删除元素的错误?
- 从 std::set 中删除元素,同时在 C++17 中迭代该元素
- 使用remove_if从矢量中删除元素
- 用C++从三维矢量中删除元素
- 从对象数组中删除元素
- 如何在不使用 vector::erase() 的情况下编写自定义 Vector 方法来删除元素?
- C++ - 按自定义数据类型向量的值删除元素
- 从任意容器中廉价删除元素的惯用方法?
- 从数组中删除元素不起作用的函数
- 删除元素 BST
- 从向量中删除元素时未处理的异常