C ++将向量传递给函数模板

时间:2011-12-02 23:22:25

标签: c++ vector

我想检查两个向量是否有任何共同的元素。这种语法出了什么问题?

// 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);

}

2 个答案:

答案 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)