【发布时间】:2013-08-12 02:12:33
【问题描述】:
我正在尝试从迭代器参数中检索值类型。我怎么能那样做?我用谷歌搜索了它并看到了一些 iterator_trait 特性,但不知道如何在我的函数上实现它。我的迭代器模板化为 T 可以采用整数或浮点数,在以下函数中,我试图遍历整数或浮点数的容器,并根据值类型将它们存储到新的向量容器中。
总而言之,我如何从任意迭代器中获取值类型信息
template<typename T>
void Merge_Function(T begin, T mid, T end) {
vector<auto> left_half (begin, mid);
left_half.push_back(INFINITE);
vector<auto> right_half (mid+1, end);
right_half.push_back(INFINITE);
}
更新: 我想做的是一种就地合并排序。
vector<int> numbers = {5, 6, 3, 4, 1, 2, 7, 13, -6, 0, 3, 1, -2};
vector<int> L_half(numbers.begin(), numbers.end());
这行得通,所以我在下面尝试类似的事情
template<typename T>
void practice(T begin, T end) {
auto length = end - begin;
auto mid = length/2;
typedef typename std::iterator_traits<T>::value_type value_type;
vector<value_type> L_half(begin, mid);
vector<value_type> R_half(mid+1, end);
R_half.push_back(10000);
}
所以在主函数中 我打电话
practice(numbers.begin(), numbers.end());
起初我包括以下内容
#include <iostream>
using namespace std;
#include <algorithm>
#include <vector>
#include <iterator>
template<typename T>
void practice(T begin, T end);
但是在排队 向量 L_half(begin, mid);
我收到了错误
/~~/main.cpp:105:14: No matching constructor for initialization of 'vector<int>'
我正在使用最新版本的 macbook air。
【问题讨论】:
标签: c++ templates vector stl iterator