2017-02-16 72 views
0

当我取消引用容器的迭代器(例如*v.begin())时,我总是获得对包含类型的引用。然后,我不能使用decltype来初始化另一个容器。使用decltype来初始化容器

int main() 
{ 
    vector<int> a; 
    vector<decltype(*a.begin())> b; 
    return 0; 
} 

我该如何解决这个问题?

+7

使用'std :: remove_reference'。看看它。 –

+6

'std :: vector b;' – Snps

回答

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删除从iterator的反引用的参考。

std::vector<std::remove_reference<decltype(*a.begin())>::type> b;