首先,我有一个forward_list
:
forward_list<int> f {1, 0, 5, 4};
auto i = *(f.begin());
auto beg = f.begin();
然后,我尝试从vector
构建一个f
,我想使用decltype
从迭代器获取类型。
vector<decltype(*beg)> v{f.begin(), f.end()}; // compile error
但是
vector<decltype(i)> v{f.begin(), f.end()};
效果很好。
错误信息主要与memory
有关:
错误:“指针”被声明为指向“ int&”类型的引用的指针
错误:“ const_pointer”被声明为指向“ int&”类型引用的指针
答案 0 :(得分:1)
改为使用std::iterator_traits
:
using type = std::iterator_traits<decltype(beg)>::value_type;
std::vector<type> v{f.begin(), f.end()};
或衰减已取消引用的迭代器类型
using type = std::decay_t<decltype(*beg)>;
std::vector<type> v{f.begin(), f.end()};