c++ - const_iterator 和 const_iterator::value_type 的 constness

标签 c++ iterator const-iterator iterator-traits

为什么在 STL 中

std::iterator_traits<const T*>::value_type

类型相同
std::iterator_traits<T*>::value_type

为什么要这样设计?第一个不应该是const T,第二个不应该是T吗?您应该如何采用迭代器的底层 const 正确类型?我知道您可以编写自己的模板类和特化并从中获取它

    std::iterator_traits<const T*>::pointer

但是不应该有一个成员 typedef 来保存它吗?

最佳答案

常量对于值类型无关紧要,因为值意味着一个拷贝。 std::iterator_traits<const T*>::referenceconst T&但是。

例如,你可以写这个函数:

template <class Iterator>
typename std::iterator_traits<Iterator>::value_type getValue(Iterator i)
{
  return *i;
}

无论 Iterator 是否为 const T * 都可以正常工作或 T * .

关于c++ - const_iterator 和 const_iterator::value_type 的 constness,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12819405/

相关文章:

c++ - 使用 Google C++ Mocking Framework (Google Mock) (V1.5) 将任意参数传递给调用的方法

c++ - 如何安全地处理循环中的迭代器?

iterator - .cloned() 应该在 .filter() 之前还是之后

c++ - 当我从 map 中删除条目时, `map::iterator` 会发生什么情况?

c++ - 通过不影响不变量的集合的非常量迭代器访问成员

c++ - 将对象转换为 vector 的 const_iterator

c++ - 构造函数中的 std::initializer_list 转换

c++ - 专门化类模板的成员函数模板

c++ - c/c++分布式计算框架

c++ - 如何删除 const_iterator 的常量?