对于我正在使用的任何 STL 容器,如果我使用迭代器的缺省构造函数声明一个迭代器(特定容器类型) ,迭代器将被初始化为什么?
例如,我有:
std::list<void*> address_list; std::list<void*>::iterator iter;
ITER 将被初始化为什么?
迭代器没有初始化,就像 int x;声明一个没有初始化的整数一样。它没有正确定义的值。
int x;
缺省构造函数将迭代器初始化为 单数值:
迭代器还可以具有与任何序列无关的奇异值。 [示例: 在声明未初始化的指针 x之后(与 int* x;一样) , 必须始终假定 x具有指针的单数值。 < em > ーー结束示例] 对于奇异值,大多数表达式的结果是未定义的 [24.2.15]
x
int* x;
按照惯例,容器的“ 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" }
但是,由于默认构造的容器迭代器不与任何特定的容器相关联,因此它不可能获得好的值。因此,它只是一个未初始化的变量,唯一合法的操作就是为它分配一个有效的迭代器。
std::vector<X>::iterator iter; //no particular value iter = some_vector.begin(); //iter is now usable
对于其他类型的迭代器,这可能不是真的。例如,在 istream_iterator的情况下,默认构造的迭代器表示(相当于)一个已经到达输入流的 EOF 的 istream_iterator。
istream_iterator