为什么以下代码可以正常运行:
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;
}
但是如果我在模板函数中将变量更改为指针,则编译器会产生错误:
&#39;的std ::设置&LT; int&gt; *&#39;不是类,结构或联合类型
这里有什么问题?
答案 0 :(得分: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()
。有关详细信息,请参阅This link。