簡體   English   中英

唯一元素向量的C ++模板函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM