【问题标题】:C++ create vector from template iteratorsC++ 从模板迭代器创建向量
【发布时间】:2015-12-12 08:18:53
【问题描述】:

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

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&lt;__gnu_cxx::__normal_iterator&lt;int*, std::vector&lt;int&gt; &gt;, std::allocator&lt;__gnu_cxx::__normal_iterator&lt;int*, std::vector&lt;int&gt; &gt; &gt; &gt;::iterator {aka __gnu_cxx::__normal_iterator&lt;__gnu_cxx::__normal_iterator&lt;int*, std::vector&lt;int&gt; &gt;*, std::vector&lt;__gnu_cxx::__normal_iterator&lt;int*, std::vector&lt;int&gt; &gt;, std::allocator&lt;__gnu_cxx::__normal_iterator&lt;int*, std::vector&lt;int&gt; &gt; &gt; &gt; &gt;}’ to non-scalar type ‘__gnu_cxx::__normal_iterator&lt;int*, std::vector&lt;int&gt; &gt;’ requested

【问题讨论】:

  • 如何“不工作”?你得到构建错误(然后是什么错误)?你有运行时错误吗?意外行为?您如何使用函数,模板参数扩展为什么?请创建一个Minimal, Complete, and Verifiable Example 并向我们展示。
  • 对不起,添加了一个例子

标签: c++ templates iterator


【解决方案1】:

您需要创建迭代器的值类型的向量,而不是迭代器的向量。您可以使用 std::iterator_traits&lt;iterator&gt; 标头中获取值类型。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 2013-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多