gpt4 book ai didi

c++ - 如何使用 vector (类)创建 find() 函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:39:10 33 4
gpt4 key购买 nike

有像这样的类

class C_Service
{
public :

C_Service(); {memset(this, 0, sizeof(*this));}
C_Service(int type, int idx) {memset(this, 0, sizeof(*this)); this->type = type; this->idx = idx;}
bool operator==(const C_Service& svc) const { return (this->type == svc.type && this->idx == svc.idx);}

word type;
word idx;

dword aId;
dword bId;
char* name;
};

我使用的测试代码如下,

void vec_find(int type, int idx)
{
vector<C_Service*> vec;

// added several items in vector vec
...

vector<C_Service*>::iterator iter;
C_Service cSvc(type, idx);
iter = find(vec.begin(), vec.end(), &cSvc);
C_Service* findsvc = *iter;
if(findsvc)
printf("FOUND : type(%d), idx(%d), name(%s)\n", findsvc->type, findsvc->idx, findsvc->name);
else
printf("Not FOUND!!\n");
}

然后,它给出“未找到!!”甚至设置正确的值。我发现了一些错误并尝试更改..

iter = find(vec.begin(), vec.end(), &cSvc);

iter = find(vec.begin(), vec.end(), cSvc);

删除“&”然后给出编译错误信息

/libcxx/algorithm: In instantiation of '_InputIterator std::__1::find(_InputIterator, _InputIterator, const _Tp&) [with _InputIterator = std::__1::__wrap_iter; _Tp = C_Service]':

no match for 'operator==' (operand types are 'C_Service*' and 'const C_Service')

我搜索到在Container中使用find()函数时,可以使用operator==但是,我无法进球..T.T

我有什么错?

最佳答案

问题是你的 vec是指针 vector ,而不是 C_Service 的 vector 对象。

因此

find(vec.begin(), vec.end(), &cSvc)

检查cSvc的地址是否变量包含在 vec 中(这不是因为你刚刚创建了 cSvc 所以它不能从其他任何地方引用)。它不使用您的 operator==根本上,它只是比较指针。

要修复它,您可以更改 vec成为std::vector<C_Service>

find(vec.begin(), vec.end(), cSvc)

或将自定义谓词传递给 find_if ,您可以在其中手动取消引用您的指针:

find_if(vec.begin(), vec.end(), [&](const C_Service *p) { return *p == cSvc; })

关于c++ - 如何使用 vector (类)创建 find() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53669410/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com