所以我想对类中的向量进行一些错误检查,以便在将新项添加到向量之前查看该项是否已存在。
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);
}
}
vector_是成员类成员std :: vector。使用此当前实现,所有new_item都被忽略,即使它不是重复的。我知道'if(items = new_item)'是有问题的一行,但我不知道为什么。
答案 0 :(得分:6)
您要分配而不是在此处比较相等:
if(items = new_item) // assigns value of new_item to items
使用经过良好测试的标准库函数(例如std::find
:
#include <algorithm> // for std::find
....
if (find(vector_.begin(), vector_.end(), newitem) == vector_.end())
vector_.push_back(newitem);
答案 1 :(得分:2)
你有一个错字:
if(items = new_item)
应该是
if (items == new_item)
是的,你可以写
if (std::find(std::begin(vector_), std::end(vector_), new_item) == std::end(vector_) {
vector_.push_back(new_item);
}
或使用std::set
答案 2 :(得分:1)
=
是作业
==
是平等
你想要
if(items == new_item)
{
return;
}
答案 3 :(得分:1)
这就是你需要的:
void ClassA::func(std::shared_ptr<ClassB> new_item)
{
for(auto items : vector_)
{
if(items == new_item)
{
return;
}
}
vector_.push_back(new_item);
}
请注意,您需要==
而不是=
。此外,您的代码在每次迭代时都向向量添加new_item
。现在,如果找不到该项目,它就完成了。
答案 4 :(得分:1)
您正在使用
if(items = new_item)
{
return;
}
new_item的值被分配给项目,因为“=”是一个赋值运算符,任何正数的if都将使条件成立。您需要使用“==”运算符进行比较