使用decltype初始化容器

时间:2017-02-16 02:16:58

标签: c++

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

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

我该如何解决这个问题?

1 个答案:

答案 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;