从指针向量中查找并删除元素?

发布于 2024-12-08 19:59:05 字数 436 浏览 0 评论 0原文

vector<unsigned int> x;
vector<unsigned int>::iterator itr;
unsigned int varF;
...
....

// find and delete an element from a vector.
itr = std::find(x.begin(), x.end(), varF);  // <algorithm>
if (itr != x.end()) 
x.erase(itr);
//or
x.erase(std::remove(x.begin(), x.end(), varF), x.end()); 

我想将此向量转换为指针向量

vector<unsigned int*> x;

如何将上述功能转换为指针向量?

vector<unsigned int> x;
vector<unsigned int>::iterator itr;
unsigned int varF;
...
....

// find and delete an element from a vector.
itr = std::find(x.begin(), x.end(), varF);  // <algorithm>
if (itr != x.end()) 
x.erase(itr);
//or
x.erase(std::remove(x.begin(), x.end(), varF), x.end()); 

I want to convert this vector to a vector of pointers

vector<unsigned int*> x;

How I can convert the above functionality for a vector of pointers?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

债姬 2024-12-15 19:59:05

使用 find_if 而不是 find,或使用 remove_if 而不是 remove,以使用自定义谓词:

struct FindIntFromPointer
{
  FindIntFromPointer(int i) : n(i) { }
  bool operator()(int * p) const { return n == *p; }
private:
  int n;
};

std::find_if(x.begin(), x.end(), FindIntFromPointer(varF));
x.erase(std::remove_if(x.begin(), x.end(), FindIntFromPointer(varF)), x.end());

如果您有 C ++11,您可以使用 lambda 代替显式谓词:

std::find_if(x.begin(), x.end(), [varF](int * p) -> bool { return varF == *p; });

如果您想在需要取消引用和比较的其他类似情况下重用谓词,则可以将谓词转换为模板。如果是这种情况,模板比每次都输入 lambda 更优雅。

Use find_if instead of find, or remove_if instead of remove, to employ a custom predicate:

struct FindIntFromPointer
{
  FindIntFromPointer(int i) : n(i) { }
  bool operator()(int * p) const { return n == *p; }
private:
  int n;
};

std::find_if(x.begin(), x.end(), FindIntFromPointer(varF));
x.erase(std::remove_if(x.begin(), x.end(), FindIntFromPointer(varF)), x.end());

If you have C++11, you can use a lambda instead of the explicit predicate:

std::find_if(x.begin(), x.end(), [varF](int * p) -> bool { return varF == *p; });

The predicate could be turned into a template if you want to reuse it for other similar situations where you need to dereference-and-compare. If this is the case, a template is more elegant than typing out the lambdas each time.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文