c++ - 使用 decltype 初始化容器

标签 c++

当我取消引用容器的迭代器时(例如 *v.begin()),我总是得到对包含类型的引用。然后,我无法使用 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 从取消引用的迭代器中移除引用。

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

关于c++ - 使用 decltype 初始化容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42263620/

相关文章:

c++ - CLion 的“运行”按钮变灰或无法正常工作

c++ - std::array 的 constexpr 开头

c++ - 如何解决 Paddle v0.8.0b 上的 "cudaSuccess = err (0 vs. 8)"错误?

c++ - 运算符重载疑惑

c++ - 什么代表 C++ 中的 Math.IEEERemainder(x,y)?

C++ String to Double 解析异常?

c++ - 我可以设置 ostream 分隔符吗

c++ - 使用 Opencv 分布良好的特征

c++ - 实现一个队列

c++ - 英特尔 SIMD - 如何检查 __m256* 是否包含任何非零值