[英]C++ Template Function for Vector of Unique Elements
我正在嘗試創建一個模板函數,該函數通過引用采用類型為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:錯誤:預期的不合格ID它= std :: unique(vec.begin(),vec.end());
和
functions.cpp:53:41:錯誤:意外類型名稱'it':預期表達式vec.resize(std :: distance(vec.begin(),it));
有人願意為我解密這些錯誤消息,並指出正確的方向來解決問題嗎?
這兩個錯誤都在抱怨,因為it
是一種類型,但是您試圖將其用作對象。
帶走typedef
從聲明it
,這樣你聲明一個迭代對象,而不是同義詞類型的迭代器類型。
要不就:
auto it = std::unique(vec.begin(), vec.end());
vec.resize( std::distance(vec.begin(),it) );
您將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
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.