使用decltype来初始化容器
问题描述:
当我取消引用容器的迭代器(例如*v.begin()
)时,我总是获得对包含类型的引用。然后,我不能使用decltype
来初始化另一个容器。使用decltype来初始化容器
int main()
{
vector<int> a;
vector<decltype(*a.begin())> b;
return 0;
}
我该如何解决这个问题?
答
选择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
删除从iterator的反引用的参考。
std::vector<std::remove_reference<decltype(*a.begin())>::type> b;
使用'std :: remove_reference'。看看它。 –
'std :: vector b;' –
Snps