0

为什么以下代码可以正常工作:

template <typename Set, typename Vector> void copySetToVector2(Set &s, Vector &v)
{
    copy(s.begin(), s.end(), inserter(v, v.begin()));
}

int main()
{
    set<int> s1;
    s1.insert(1);
    s1.insert(2);
    s1.insert(3);

    vector<int> v1;

    copySetToVector2(s1, v1);
    return 0;
}

但是如果我在模板函数编译器中将变量更改为指针会产生错误:

'std::set< int >*' 不是类、结构或联合类型

这里有什么问题?

4

1 回答 1

4

如果你改变这个:

template <typename Set, typename Vector> void copySetToVector2(Set &s, Vector &v)

对此:

template <typename Set, typename Vector> void copySetToVector2(Set *s, Vector *v)

那么身体需要看起来像这样:

template <typename Set, typename Vector> void copySetToVector2(Set *s, Vector *v)
{
    copy(s->begin(), s->end(), inserter(*v, v->begin()));
}

点表示法s.begin()不适用于指针。您需要切换到s->begin(). 有关更多详细信息,请参阅此链接

于 2013-01-24T19:39:14.413 回答