gpt4 book ai didi

C++ 从模板迭代器创建 vector

转载 作者:行者123 更新时间:2023-11-30 02:34:53 25 4
gpt4 key购买 nike

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

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

在其中我需要创建一个临时 vector 来存储来自 first 的值指向哪里 middle点。

有没有办法做到这一点?我试过类似的东西

vector<Iterator> temp(first, middle);

而且我没有得到正确类型的 vector 。

示例代码:

#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

最佳答案

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

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

关于C++ 从模板迭代器创建 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34237766/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com