The*_*oid 60 c++ containers iterator stl default
对于我正在使用的任何STL容器,如果我使用迭代器的默认构造函数声明一个迭代器(此特定容器类型),迭代器将初始化为什么?
例如,我有:
std::list<void*> address_list;
std::list<void*>::iterator iter;
Run Code Online (Sandbox Code Playgroud)
什么会被初始化?
Unc*_*ens 52
按照惯例,容器的"NULL迭代器"用于表示没有结果,比较等于结果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"
}
Run Code Online (Sandbox Code Playgroud)
但是,由于默认构造的容器迭代器不与任何特定容器相关联,因此它没有任何好处.因此它只是一个未初始化的变量,唯一合法的操作就是为它分配一个有效的迭代器.
std::vector<X>::iterator iter; //no particular value
iter = some_vector.begin(); //iter is now usable
Run Code Online (Sandbox Code Playgroud)
对于其他类型的迭代器,这可能不是真的.例如istream_iterator,在默认情况下,默认构造的迭代器表示(比较等于)istream_iterator已达到输入流的EOF的a.
fre*_*low 22
默认构造函数将迭代器初始化为单数值:
迭代器也可以具有与任何序列无关的奇异值.[示例:在声明未初始化的指针x(与int*x;一样)之后,必须始终假定x具有指针的奇异值.-end example] 大多数表达式的结果未定义为奇异值 [24.2.1§5]
Jes*_*erE 11
迭代器未初始化,就像int x;声明一个未初始化的整数一样.它没有正确定义的值.
| 归档时间: |
|
| 查看次数: |
47623 次 |
| 最近记录: |