【发布时间】:2014-01-16 16:51:02
【问题描述】:
所以我想对类中的向量进行一些错误检查,以查看该项目是否已经存在,然后再将新项目添加到向量中。
A 类 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)' 是有问题的行,但我不知道为什么。
【问题讨论】:
-
首先,尝试使用
==而不是=。接下来看看std::find。 -
这不是有未定义的行为,因为
push_back可能会重新分配,然后基于范围的 for 循环使用的迭代器将无效?更不用说它会多次添加新项目。 -
应该使用 const 迭代器、const 和参数的另一个原因。当您打算阅读时(在您的情况下进行比较)。如果你使用了 const 迭代器,你就不会在这里发布这个问题 :)
-
你应该使用
std::set,而不是std::vector
标签: c++ vector shared-ptr