什么是迭代器的默认值?
对于我正在使用的任何STL容器,如果使用迭代器的默认构造函数声明迭代器(此特定容器types的),迭代器将被初始化为什么?
例如,我有:
std::list<void*> address_list; std::list<void*>::iterator iter;
什么将被初始化?
按照惯例,容器的“NULL迭代器”(用于指示没有结果container.end()
与container.end()
的结果相等。
std::vector<X>::iterator iter = std::find(my_vec.begin(), my_vec.end(), x); if (iter == my_vec.end()) { //no result found; iter points to "nothing" }
但是,由于默认构build的容器迭代器与任何特定的容器都没有关联,所以没有什么价值。 因此,它只是一个未初始化的variables,唯一合法的操作是为它分配一个有效的迭代器。
std::vector<X>::iterator iter; //no particular value iter = some_vector.begin(); //iter is now usable
对于其他types的迭代器,这可能不是真的。 例如,在istream_iterator
的情况下,默认构造的迭代器表示(比较等于)已达到inputstream的EOF的istream_iterator
。
默认构造函数将迭代器初始化为单值 :
迭代器也可以具有与任何序列无关的奇异值。 [例子:在声明一个未初始化的指针x之后(和int * x;一样),必须假定x总是有一个指针的奇异值。 – 结束示例] 大多数expression式的结果未定义为奇异值 [24.2.1§5]
迭代器没有初始化,就像int x;
声明一个未初始化的整数。 它没有一个正确定义的值。