C ++从模板迭代器创建向量

时间:2015-12-12 08:18:54

标签: c++ templates iterator

我有一个函数,它将一些模板迭代器作为输入:

template<class Iterator, class Comparator>
void Merge(Iterator first, Iterator middle, Iterator last, Comparator cmp) {

在其中我需要创建一个临时向量来存储从first指向middle点的位置的值。

有办法做到这一点吗?我试过像

这样的东西
vector<Iterator> temp(first, middle);

我没有得到合适类型的矢量。

示例代码:

#include <vector>

template<class Iterator>
void Merge(Iterator first, Iterator middle) {
    std::vector<Iterator> temp(first, middle);
    Iterator left_it = temp.begin();
}

int main() {
    std::vector<int> myVec = {1, 2, 3, 4};
    Merge(myVec.begin(), myVec.end());
    return 0;
}

example.cpp:6:35: error: conversion from ‘std::vector<__gnu_cxx::__normal_iterator<int*, std::vector<int> >, std::allocator<__gnu_cxx::__normal_iterator<int*, std::vector<int> > > >::iterator {aka __gnu_cxx::__normal_iterator<__gnu_cxx::__normal_iterator<int*, std::vector<int> >*, std::vector<__gnu_cxx::__normal_iterator<int*, std::vector<int> >, std::allocator<__gnu_cxx::__normal_iterator<int*, std::vector<int> > > > >}’ to non-scalar type ‘__gnu_cxx::__normal_iterator<int*, std::vector<int> >’ requested

1 个答案:

答案 0 :(得分:3)

您需要创建迭代器的值类型的向量,而不是迭代器的向量。您可以使用<iterator>标题中的std::iterator_traits获取值类型。

typedef typename std::iterator_traits<Iterator>::value_type value_type;
std::vector<value_type> temp(first, middle);