接受作为模板迭代器并返回迭代器类型的vector的c++模板函数
C++ template function that takes as template iterator and returns a vector with the type of the iterator
我试图创建一个函数,它需要两个模板类型的迭代器。该函数应返回迭代器区间中包含的所有值的奇数值。我尝试创建第二个类型名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> 相关文章:
- std::vector::迭代器是否可以合法地作为指针
- 为什么 vector 的随机访问迭代器给出与指针不同的内存地址?
- 修改 std::vector 会使迭代器无效吗?
- 计算两个迭代器之间的距离时"Vector Iterators Incompatible"
- 从 std::vector 迭代器中执行函数指针
- 编译错误 std::vector<std::shared_ptr<T>>迭代器和擦除方法
- std::vector::erase() 真的会在擦除时使迭代器失效吗?
- 如果我在下面的代码中使用 list 而不是 vector,为什么在我尝试在迭代器之间执行减法的行中编译失败?
- C++ std::vector语言 - 如何修改迭代器指定的元素?
- 迭代器返回 vector::begin()
- 使用 std::vector<Particle> 粒子;函数 .at() 不能与迭代器一起使用,它作为 for 循环中的参数
- c std :: vector迭代器构造函数,first == last
- C++迭代器作为 lambda 函数中的参数,断言失败:"vector iterators incompatible"
- 在类 std::vector 中使用迭代器
- 为什么 std::vector 迭代器在 erase() 调用后失效?
- 为每个循环中的std :: vector的当前元素分配迭代器
- 使用正向迭代器反向迭代 std::vector
- 英特尔检查器 XE 2012 警告 #12367 - 将迭代器参数切片传递给 vector::erase()
- 迭代器 - vector::itrator 和 array::iterator 的重载函数
- 向量迭代器 > vector.end() 即使向量不应该被重新分配