我正在尝试创建一个模板函数,该函数通过引用获取类型为T的输入向量,并以仅包含唯一元素的方式修改该向量:
这是我到目前为止所得到的:
template<typename T>
void uniqueOnly(vector<T>& vec){
typedef typename std::vector<T>::iterator it;
it = std::unique(vec.begin(), vec.end());
vec.resize( std::distance(vec.begin(),it) );
}
但是,在尝试编译时遇到了一些错误,即:
functions.cpp:52:6:错误:期望unqualified-id it = std :: unique(vec.begin(),vec.end());
和
functions.cpp:53:41:错误:意外的类型名称&#39;它&#39;:预期 表达式vec.resize(std :: distance(vec.begin(),it));
请有人这么慷慨解密我的错误信息,并指出我正确的方向来解决问题吗?
答案 0 :(得分:3)
这两个错误都在抱怨,因为it
是一种类型,但您尝试将其用作对象。
从typedef
的声明中删除it
,以便声明迭代器对象,而不是迭代器类型的同义词类型。
或者,只是:
auto it = std::unique(vec.begin(), vec.end());
vec.resize( std::distance(vec.begin(),it) );
答案 1 :(得分:1)
您将it
定义为std::vector<T>::iterator
类型。
所以你的代码不会编译,因为it
不是迭代器,它是迭代器类型。
template <typename T>
void uniqueOnly(std::vector<T>& vec){
typedef typename std::vector<T>::iterator It; // It is the name of a type
It it = std::unique(vec.begin(), vec.end());
vec.erase(it, vec.end()); // uses aschepler's suggestion
}