2017-02-16 53 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;