接受作为模板迭代器并返回迭代器类型的vector的c++模板函数

C++ template function that takes as template iterator and returns a vector with the type of the iterator

本文关键字:迭代器 vector c++ 函数 类型 返回      更新时间:2023-10-16

我试图创建一个函数,它需要两个模板类型的迭代器。该函数应返回迭代器区间中包含的所有值的奇数值。我尝试创建第二个类型名T2,并使用它在代码片段中的"?? ?"的地方。

      template <typename T1>
      std::vector<??> odd(T1 start,T1 end){
          std::vector<??> result;
          while(start++!=end){
            if(*result % 2 == 1){
              ans.push_back(*start);
            }
          }
          return result;
        }
        int main(){
            int a[6] = {1,2,3,4,5,6};
            udda(std::begin(a),std::end(a));
        }

我想让函数做的是创建一个与迭代器相同类的向量并返回它。这可能吗?

可以使用decltype和尾随返回类型:

template <typename T1> 
auto odd(T1 start, T1 end) 
    -> std::vector<typename std::remove_reference<decltype(*start)>::type>
{ 
    /* ... */ 
} 
<<p> wandbox例子/strong>