我想检查两个向量是否有任何共同的元素。这种语法出了什么问题?
// Check whether the current list and the input l2 share any nodes or not
bool shared(const VectorList< NODETYPE > &l2);
template< typename NODETYPE > //SHARED
bool VectorList< NODETYPE>::shared(const VectorList< NODETYPE > &l2)
{
for(int i = 0; i < (int)vList.size(); i++)
{
for (int j = i; j < (int)l2.size() ; j++)
{
if (vList[i] == l2[j])
{
return(1);
}
}
}
return(0);
}
答案 0 :(得分:5)
假设您已将VectorList实现为(类似于)标准容器,我会考虑编写(请参阅find_first_of
):
template<typename T>
bool VectorList<T>::shared(const VectorList<T> &l2) const // <-- NOTE added const
{
return end() != std::find_first_of(
begin(), end(),
l2.begin(), l2.end());
}
请注意,(最坏情况)运行时复杂性仍然是二次的(或O(n*m)
)
答案 1 :(得分:2)
你的矢量是否有序?因为如果没有,你不应该做j = i,或者它不会找到一些共享值,即
1 2 3
2 3 4
如果您使用j = i开始第二个 for循环,您将永远不会找到共享值“2”。所以你需要每次从向量的开头开始第二个 for loop (j = 0)