检查项目是否已在向量中

Dan*_*iel 0 c++ vector shared-ptr

因此,我想对类中的向量进行一些错误检查,以便在将新项添加到向量之前查看该项是否已存在.

ClassA cpp

void ClassA::func(std::shared_ptr<ClassB> new_item)
{
    for(auto items : vector_)
    {
        if(items = new_item)
        {
            return;
        }
        vector_.push_back(new_item);
    }
}
Run Code Online (Sandbox Code Playgroud)

vector_是成员类成员std :: vector.使用此当前实现,所有new_item都被忽略,即使它不是重复的.我知道'if(items = new_item)'是有问题的一行,但我不知道为什么.

jua*_*nza 6

您在这里分配而不是比较相等:

if(items = new_item) // assigns value of new_item to items
Run Code Online (Sandbox Code Playgroud)

使用经过良好测试的标准库函数可以轻松避免这种问题,例如std::find:

#include <algorithm> // for std::find
....
if (find(vector_.begin(), vector_.end(), newitem) == vector_.end())
  vector_.push_back(newitem);
Run Code Online (Sandbox Code Playgroud)