当我取消引用容器的迭代器(例如*v.begin()
)时,我总是得到对包含类型的引用。然后,我无法使用decltype
初始化另一个容器。
int main()
{
vector<int> a;
vector<decltype(*a.begin())> b;
return 0;
}
我该如何解决这个问题?
答案 0 :(得分:3)
选择1:
声明b
的最简单方法是使用decltype(a)
作为容器类型。
decltype(a) b;
选择2:
声明b
的下一级间接性是使用decltype(a)::value_type
作为包含的类型。
std::vector<decltype(a)::value_type> b;
选择3:
声明b
的最全面的方法是使用std::remove_reference
从解除引用的迭代器中删除引用。
std::vector<std::remove_reference<decltype(*a.begin())>::type> b;