c++ - 标准容器的迭代器是 DefaultConstructible 吗?

标签 c++ iterator initialization

格式是否正确?

int main() {
    std::deque< int >::iterator x; // Or any container.
}

奖励问题:

  • auto y = x; 有可能复制未初始化状态吗?
  • … x = {}; 需要一个非显式默认构造函数呢?
  • 如果 x == y 都是值初始化的(如图所示不是默认初始化的)呢?

最佳答案

取决于您正在检查的迭代器概念。

如果它是一个常规的 Iterator,这只是被称为迭代器的绝对最低限度,那么答案是否定的,因为它必须只满足 CopyConstructible、CopyAssignable 和 Destructible 的可构造性要求。 (§ 24.2.2/2)

然而,大多数容器迭代器满足双向迭代器的要求(std::forward_list 除外,这是一个异常)。所有的 BidirectionalIterators 反过来也满足 ForwardIterator 的要求,满足 InputIterator 的要求(相当啰嗦)。

ForwardIterator 的要求明确说明:

A class or pointer type X satisfies the requirements of a forward iterator if

— X satisfies the requirements of an input iterator (24.2.3),

— X satisfies the DefaultConstructible requirements (17.6.3.1),

N3376 中的 24.2.5/1

所以是的,这是一个有效的假设。

您可以在 § 24.2 中找到迭代器要求,但在 cppreference 中对其进行了很好的总结。

关于c++ - 标准容器的迭代器是 DefaultConstructible 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20114819/

相关文章:

c - 指向 C 中已声明但未初始化的变量的指针

c++ - 分配大的静态 std::unordered_map 导致堆栈溢出

c++ - 迭代方向枚举

c++ - 可以(由编译器)使用多少线程来初始化全局对象(在函数 main 之前)

java - 如何从 LinkedHashMap 迭代器获取键值对?

c++ - 什么时候将 const_iterator 声明为 const 迭代器就足够了?

Java:不允许 for 循环内的 2-assignments-2-initializations?

c++ - 如何获取另一个应用程序的所有窗口的句柄

c++ - 使用 UDP(WinSock 和 C++)发送和接收结构?

c++ - g++ 和 gcc 4.8 找不到 null_ptr?